{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"toc_visible": true,
"authorship_tag": "ABX9TyMKQ5wchkfJdzJMVGZ/ibvL",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"
"
]
},
{
"cell_type": "markdown",
"source": [
"Goal\n",
"* Apply the finite difference method to solve steady state differential equations\n",
"* Apply linear system solution methods to real applications\n",
"* Be able to implement Dichilet and Neumann boundary conditions"
],
"metadata": {
"id": "CNXux2JM8Pa7"
}
},
{
"cell_type": "markdown",
"source": [
"# The Finite Difference method"
],
"metadata": {
"id": "AsEPbd_f6Dgo"
}
},
{
"cell_type": "markdown",
"source": [
"In the past lecture, we saw how to write derivatives in terms of the function evaluated at discrete points. Let's use it and see what we've been building up to."
],
"metadata": {
"id": "C9thZ5A83Ini"
}
},
{
"cell_type": "markdown",
"source": [
"Lets take an unkown function $f(x)$ and *discretize it* by sampling it at a set of coordinates. We saw that finite difference benefits from equal spacing, so lets sample it with an even step size $h$."
],
"metadata": {
"id": "fnnIN03iX8lp"
}
},
{
"cell_type": "markdown",
"source": [
"For a function $y(x)$ we would get:"
],
"metadata": {
"id": "bGvL1arirwQJ"
}
},
{
"cell_type": "markdown",
"source": [
""
],
"metadata": {
"id": "yfDD8g5oVf-H"
}
},
{
"cell_type": "markdown",
"source": [
"Finite difference allows us to express the derivatives of $y(x)$ in terms of the vector elements. For step size $h$, we have:\n",
"\n",
"| Finite Difference Approximation | Formula in terms of $y_i$ | Order of Accuracy |\n",
"|---|---|---|\n",
"| Forward difference (1st derivative) | $y'(x_i) \\approx (y_{i+1} - y_i) / h$ | O(h) |\n",
"| Backward difference (1st derivative) | $y'(x_i) ≈ (y_i - y_{i-1}) / h$ | O(h) |\n",
"| Central difference (1st derivative) | $y'(x_i) ≈ (y_{i+1} - y_{i-1}) / (2h)$ | O(h²) |\n",
"| Forward difference (2nd derivative) | $y''(x_i) ≈ \\frac{y_{i+2} - 2y_{i+1} + y_i} {h^2}$ | O(h) |\n",
"| Backward difference (2nd derivative) | $y''(x_i) ≈ (y_i - 2y_{i-1} + y_{i-2}) / h²$ | O(h) |\n",
"| Central difference (2nd derivative) | $y''(x_i) ≈ (y_{i+1} - 2y_i + y_{i-1}) / h^2$ | O(h²) |"
],
"metadata": {
"id": "Aj4EXmf8sIfJ"
}
},
{
"cell_type": "markdown",
"source": [
"The finite difference method applied to the discretized function lets us write the differential equation in terms neighbouring values (or the boundary conditions)!"
],
"metadata": {
"id": "qqhvjnR5_5JH"
}
},
{
"cell_type": "markdown",
"source": [
"#### Example: Rocket tragectory"
],
"metadata": {
"id": "xkBzoxKs_oSe"
}
},
{
"cell_type": "markdown",
"source": [
"\n",
"We are going out to launch a rocket, and let y(t) be the altitude (meters from the surface) of the rocket at time t. We know the gravity $g=9.8m/s^2$.\n",
"\n",
"If we want to have the rocket at 50 m off the ground 5 seconds after launching, what should be the velocity at launching? (we ignore the drag of the air resistance).\n",
"\n",
"The ODE is\n",
"\n",
"$$ \\begin{align}\n",
"\\frac{d^2y}{dt^2} &= -g \\\\\n",
"\\frac{y_{i+1} - 2y_{i} + y_{i-1}} {h^2} &= -g\n",
"\\end{align}\n",
"$$\n",
"\n",
"This expression only applies in *interior* points. We must use the boundary conditions $y(0) = 0$ and $y(5) = 50$.\n",
"\n",
"Let's take $n=10$. Since the time interval is $[0, 5]$ and we have $n=10$, therefore, $h=0.5$. Using the finite difference approximated derivatives, we have\n",
"\n",
"$$ y_0 = 0$$\n",
"\n",
"$$ y_{i-1} - 2y_i + y_{i+1} = -gh^2, \\;i = 1, 2, ..., n-1$$\n",
"\n",
"$$ y_{10} = 50$$\n",
"\n",
"This looks awfully familiar...\n",
"\n",
"It's just our familiar linear system!\n",
"\n",
"$$\\begin{bmatrix}\n",
"1 & 0 & & & \\\\\n",
"1 & -2 & 1 & & \\\\\n",
" & \\ddots & \\ddots & \\ddots & \\\\\n",
" & & 1& -2& 1 \\\\\n",
" & & & &1\n",
"\\end{bmatrix}\\left[\\begin{array}{c} y_0 \\\\y_1 \\\\ ... \\\\ y_{n-1}\\\\y_n \\end{array}\\right] =\n",
"\\left[\\begin{array}{c} 0 \\\\-gh^2 \\\\ ... \\\\ -gh^2 \\\\50\\end{array}\\right]$$\n",
"\n",
"and how do we solve linear systems?!?"
],
"metadata": {
"id": "KaH8Jl5c8POz"
}
},
{
"cell_type": "code",
"source": [
"import numpy as np\n",
"import scipy as sp\n",
"import matplotlib.pyplot as plt\n",
"\n",
"n = 10\n",
"\n",
"def get_A_and_b(n):\n",
" h = (5.-0) / n\n",
"\n",
" # Get A\n",
" A = np.zeros((n+1, n+1))\n",
" A[0, 0] = 1\n",
" A[n, n] = 1\n",
" for i in range(1, n):\n",
" A[i, i-1] = 1\n",
" A[i, i] = -2\n",
" A[i, i+1] = 1\n",
"\n",
" # Get b\n",
" b = np.zeros(n+1)\n",
" b[1:-1] = -9.8*h**2\n",
" b[-1] = 50\n",
"\n",
" return A,b"
],
"metadata": {
"id": "YUB4jvZqCtpo"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"n = 10\n",
"A,b = get_A_and_b(n=10)\n",
"\n",
"print(A)\n",
"print(b)\n",
"\n",
"# solve the linear equations\n",
"y = sp.linalg.solve(A, b)\n",
"\n",
"print()\n",
"\n",
"t = np.linspace(0, 5, n+1)\n",
"plt.figure(figsize=(10,8))\n",
"plt.plot(t, y)\n",
"plt.plot(5, 50, 'ro')\n",
"plt.xlabel('time (s)')\n",
"plt.ylabel('altitude (m)')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 922
},
"id": "UJNFuUZACyKG",
"outputId": "a55bba01-be68-4137-da97-3472b1b03e9a"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[[ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [ 1. -2. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [ 0. 1. -2. 1. 0. 0. 0. 0. 0. 0. 0.]\n",
" [ 0. 0. 1. -2. 1. 0. 0. 0. 0. 0. 0.]\n",
" [ 0. 0. 0. 1. -2. 1. 0. 0. 0. 0. 0.]\n",
" [ 0. 0. 0. 0. 1. -2. 1. 0. 0. 0. 0.]\n",
" [ 0. 0. 0. 0. 0. 1. -2. 1. 0. 0. 0.]\n",
" [ 0. 0. 0. 0. 0. 0. 1. -2. 1. 0. 0.]\n",
" [ 0. 0. 0. 0. 0. 0. 0. 1. -2. 1. 0.]\n",
" [ 0. 0. 0. 0. 0. 0. 0. 0. 1. -2. 1.]\n",
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]\n",
"[ 0. -2.45 -2.45 -2.45 -2.45 -2.45 -2.45 -2.45 -2.45 -2.45 50. ]\n",
"\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "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9thjGjx4sLZu3arQ0FDT8X4RJQkAvMyECRO0detWj7r2G2Z06NBBGzduVEFBgd5//32NGzdOixcvpijhJ7KysnTvvffqq6++UmBgoOk48ACjRo2q/rhbt27q16+f2rRpo/fee88jLumlJDWC6Oho2e125ebmnnQ8NzdXcXFxhlIB8EYTJ07Up59+qiVLlqh169am48DN+fv7q23btpKkXr16ac2aNXruuef04osvGk4Gd7Nu3Trl5eXp3HPPrT7mdDq1ZMkSvfDCC3I4HLLb7QYTwt1FRESoffv22r17t+kotcKcpEbg7++vXr16acGCBdXHXC6XFixYwLXfAOqFZVmaOHGi5s2bp2+++UbJycmmI8EDuVwuORwO0zHghs4//3xt2bJFGzdurL717t1b1113nTZu3EhBwi8qLi5Wenq6WrZsaTpKrTCS1EgmT56scePGqXfv3urbt6+effZZlZSUaPz48aajwQ0VFxef9JOWjIwMbdy4UZGRkUpMTDSYDO5qwoQJevvtt/XRRx8pNDRUOTk5kqTw8HA1a9bMcDq4oylTpmjUqFFKTExUUVGR3n77bS1atEhffvml6WhwQ6GhoT+Z4xgcHKyoqCjmPuKU7r//fl122WVq06aNsrOz9cgjj8hut+uaa64xHa1WKEmNZOzYscrPz9ef//xn5eTkqEePHpo/f/5PFnMAJGnt2rUaPnx49eeTJ0+WJI0bN06zZs0ylArubPr06ZKkYcOGnXR85syZuummmxo/ENxeXl6ebrzxRh08eFDh4eHq1q2bvvzyS11wwQWmowHwAvv379c111yjw4cPKyYmRoMGDdLKlSsVExNjOlqtsE8SAAAAANTAnCQAAAAAqIGSBAAAAAA1UJIAAAAAoAZKEgAAAADUQEkCAAAAgBooSQAAAABQAyUJAAAAAGqgJAEAAABADZQkAIBbWrRokWw2m44dO2bk91+wYIE6deokp9P5i4+dP3++evToIZfL1QjJAAANjZIEADBu2LBhmjRp0knHBgwYoIMHDyo8PNxIpgceeEAPP/yw7Hb7Lz72oosukp+fn956661GSAYAaGiUJACAW/L391dcXJxsNluj/95Lly5Venq6Ro8eXevn3HTTTXr++ecbMBUAoLFQkgAARt10001avHixnnvuOdlsNtlsNu3du/cnl9vNmjVLERER+vTTT9WhQwcFBQXp6quvVmlpqV5//XUlJSWpefPmuueee066RM7hcOj+++9Xq1atFBwcrH79+mnRokU/m2n27Nm64IILFBgYWH1s06ZNGj58uEJDQxUWFqZevXpp7dq11fdfdtllWrt2rdLT0+v17wcA0Ph8TQcAADRtzz33nHbu3KmuXbvqL3/5iyQpJiZGe/fu/cljS0tL9fzzz2v27NkqKirSVVddpSuvvFIRERH6/PPPtWfPHo0ePVoDBw7U2LFjJUkTJ07Ud999p9mzZys+Pl7z5s3TRRddpC1btqhdu3anzPTtt9/q2muvPenYddddp549e2r69Omy2+3auHGj/Pz8qu9PTExUbGysvv32W6WmptbT3w4AwARKEgDAqPDwcPn7+ysoKEhxcXE/+9iKigpNnz69uoRcffXVevPNN5Wbm6uQkBB17txZw4cP18KFCzV27FhlZmZq5syZyszMVHx8vCTp/vvv1/z58zVz5kz9/e9/P+Xvs2/fvurH/yAzM1O///3v1bFjR0k6ZcGKj4/Xvn37zvjvAADgXihJAACPERQUdNIoTWxsrJKSkhQSEnLSsby8PEnSli1b5HQ61b59+5Nex+FwKCoq6rS/z/Hjx0+61E6SJk+erN/+9rd68803NWLECP3617/+yYhRs2bNVFpaWuc/HwDAPVCSAAAeo+blbZJks9lOeeyHpbiLi4tlt9u1bt26n6xSV7NY/a/o6GgdPXr0pGOPPvqorr32Wn322Wf64osv9Mgjj2j27Nm68sorqx9z5MgRxcTE1OnPBgBwH5QkAIBx/v7+tdqP6Ez17NlTTqdTeXl5Gjx48Bk977vvvvvJ8fbt26t9+/a67777dM0112jmzJnVJamsrEzp6enq2bNnveUHAJjB6nYAAOOSkpK0atUq7d27V4cOHaq3TVnbt2+v6667TjfeeKPmzp2rjIwMrV69Wk888YQ+++yz0z5v5MiRWrp0afXnx48f18SJE7Vo0SLt27dPy5Yt05o1a9SpU6fqx6xcuVIBAQFKS0url+wAAHMoSQAA4+6//37Z7XZ17txZMTExyszMrLfXnjlzpm688Ub97ne/U4cOHXTFFVdozZo1SkxMPO1zrrvuOm3btk07duyQJNntdh0+fFg33nij2rdvrzFjxmjUqFF67LHHqp/zzjvv6LrrrlNQUFC9ZQcAmGGzLMsyHQIAAHfz+9//XoWFhXrxxRd/8bGHDh1Shw4dtHbtWiUnJzdCOgBAQ2IkCQCAU3jooYfUpk2bWl36t3fvXk2bNo2CBABegpEkAAAAAKiBkSQAAAAAqIGSBAAAAAA1UJIAAAAAoAZKEgAAAADUQEkCAAAAgBooSQAAAABQAyUJAAAAAGqgJAEAAABADZQkAAAAAKjh/wEMUqBSJoubmQAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"For the velocity, $y'(0)$ we can calculate using the forward difference:"
],
"metadata": {
"id": "ZsA9HNTtHLLX"
}
},
{
"cell_type": "code",
"source": [
"(y[1] - y[0])/(5/n)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "dwGvXYvpFrEf",
"outputId": "4739a0ef-e833-44dd-a85c-c98bdc16918c"
},
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"32.05"
]
},
"metadata": {},
"execution_count": 3
}
]
},
{
"cell_type": "markdown",
"source": [
"which is pretty good compared to the analytic answer 34.5 ."
],
"metadata": {
"id": "nkJo-d7eKO1V"
}
},
{
"cell_type": "markdown",
"source": [
"#### Example: Neuman boundary condition\n"
],
"metadata": {
"id": "BIJe3zk_ZAbr"
}
},
{
"cell_type": "markdown",
"source": [
"Using finite difference method to solve the following linear boundary value problem:\n",
"\n",
"$$ y''(x) = -4y(x) +4x $$\n",
"\n",
"with the boundary conditions: $y(0) = 0$ and $y'(\\pi/2)=0$."
],
"metadata": {
"id": "i-ws7PQFZCE8"
}
},
{
"cell_type": "markdown",
"source": [
"The Dirichlet boundary condition is simple:\n",
"$$ y_0 = 0$$\n"
],
"metadata": {
"id": "uZQhG3KtZy0M"
}
},
{
"cell_type": "markdown",
"source": [
"The interior points are a little more complex. We need to move all the terms with the dependant quantity ($y$) to the left and everything else (including $x$ terms) to the right. \n",
"\n",
"$$\\begin{align}\n",
"y''(x) &= -4y(x) +4x \\\\\n",
"\\frac{y_{i-1} - 2 y_i + y_{i+1}}{h^2} +4y_i &= 4x_i \\\\\n",
"y_{i-1} - 2y_i + y_{i+1} + 4 h^2 y_i&= -4 h^2 x_i\n",
"\\end{align} $$\n",
"\n",
"for $i = 1, 2, ..., n-1$"
],
"metadata": {
"id": "l6esWqIWZ6Pa"
}
},
{
"cell_type": "markdown",
"source": [
"But what should we do for the boundary $y'(\\pi/2) = 0$?\n",
"\n",
"We can actually just write it out exactly in finite difference:\n",
"\n",
"$$\\begin{align}\n",
"\\frac{y_i - y_{i-1}}{h} &= 0 \\\\\n",
"y_i - y_{i-1} = 0\n",
"\\end{align}$$"
],
"metadata": {
"id": "W9UPyBt3bOcf"
}
},
{
"cell_type": "markdown",
"source": [
"Using matrix notation, we have:\n",
"\n",
"$$\\begin{bmatrix}\n",
"1 & 0 & & & \\\\\n",
"1 & -2+4h^2 & 1 & & \\\\\n",
" & \\ddots & \\ddots & \\ddots & \\\\\n",
" & & 1& -2+4h^2 & 1 \\\\\n",
" & & & -1 & 1\n",
"\\end{bmatrix}\\left[\\begin{array}{c} y_0 \\\\y_1 \\\\ ... \\\\ y_{n-1}\\\\y_n \\end{array}\\right] =\n",
"\\left[\\begin{array}{c} 0 \\\\4h^2x_1 \\\\ ... \\\\ 4h^2x_{n-1} \\\\4h^2x_{n}\\end{array}\\right]$$"
],
"metadata": {
"id": "oW5hj8y_Zhl7"
}
},
{
"cell_type": "markdown",
"source": [
"Lets see what we get compared to the analytic answer $y=x+0.5 \\sin2x$"
],
"metadata": {
"id": "fLCPbiFmetcY"
}
},
{
"cell_type": "code",
"source": [
"# prompt: Solve the above linear system and plot y vs x\n",
"\n",
"import numpy as np\n",
"import scipy as sp\n",
"import matplotlib.pyplot as plt\n",
"\n",
"n = 10\n",
"\n",
"def get_A_and_b(n):\n",
" h = (np.pi/2 - 0) / n\n",
"\n",
" # Get A\n",
" A = np.zeros((n+1, n+1))\n",
" A[0, 0] = 1\n",
" A[n, n-1] = -1\n",
" A[n, n] = 1\n",
" for i in range(1, n):\n",
" A[i, i-1] = 1\n",
" A[i, i] = -2 + 4*h**2\n",
" A[i, i+1] = 1\n",
"\n",
" # Get b\n",
" b = np.zeros(n+1)\n",
" for i in range(1, n):\n",
" b[i] = 4*h**2*(i*h)\n",
"\n",
" return A,b\n",
"\n",
"A,b = get_A_and_b(n=10)\n",
"\n",
"# solve the linear equations\n",
"y = sp.linalg.solve(A, b)\n",
"\n",
"y_true = lambda x: x + .5*np.sin(2*x)\n",
"\n",
"x = np.linspace(0, np.pi/2, n+1)\n",
"plt.figure(figsize=(10,8))\n",
"plt.plot(x, y_true(x), label=\"True\")\n",
"plt.plot(x, y)\n",
"plt.xlabel('x')\n",
"plt.ylabel('y(x)')\n",
"plt.legend()\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 696
},
"id": "a6bBIgUmeNEs",
"outputId": "0ae62a66-e104-4b89-c883-d2c73b039d32"
},
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAKnCAYAAACxnB1/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABxPklEQVR4nO3dd3gVdd6G8fuk0xJ6D9KLSG8ClkVRREWxgaCC2FZFVLAsVtay4rq2fde2uvYGgoKuYmVVFLGAoqiIIigI0ktCS3LOmfcPNIqiFEkmJ7k/13WuTYaZ5MnIJnn4fWcmEgRBgCRJkiTpNyWFHUCSJEmSSjqLkyRJkiTtgMVJkiRJknbA4iRJkiRJO2BxkiRJkqQdsDhJkiRJ0g5YnCRJkiRpByxOkiRJkrQDKWEHKG7xeJylS5dSqVIlIpFI2HEkSZIkhSQIAnJzc6lbty5JSb+/plTmitPSpUvJzs4OO4YkSZKkEmLx4sXUr1//d/cpc8WpUqVKwNaTk5mZGXIaSZIkSWHJyckhOzu7sCP8njJXnH4cz8vMzLQ4SZIkSdqpS3i8OYQkSZIk7YDFSZIkSZJ2wOIkSZIkSTtQ5q5x2hlBEBCNRonFYmFHSRjJycmkpKR4i3dJkiSVShanX8jPz+f7779n06ZNYUdJOOXLl6dOnTqkpaWFHUWSJEnaoyxOPxOPx1m4cCHJycnUrVuXtLQ0V1B2QhAE5Ofns3LlShYuXEizZs12+AAxSZIkKZFYnH4mPz+feDxOdnY25cuXDztOQilXrhypqal8++235Ofnk5GREXYkSZIkaY9xWWA7XC3ZPZ43SZIklVb+pitJkiRJO2BxkiRJkqQdCLU4TZs2jX79+lG3bl0ikQiTJ0/e4TF5eXlcccUV7LXXXqSnp9OwYUMeeOCBog8rSZIkqcwKtTht3LiRdu3aceedd+70MQMGDGDq1Kncf//9zJs3jyeffJIWLVoUYcqSLxKJ/O7rr3/9a9gRJUmSpIQW6l31+vbtS9++fXd6/5deeok333yTBQsWULVqVQAaNmxYROkSx/fff1/49vjx47n66quZN29e4baKFSsWvh0EAbFYjJQUb6goSZIk7ayEusbpueeeo3Pnztx0003Uq1eP5s2bc/HFF7N58+bfPCYvL4+cnJxtXrsiCAI25UdDeQVBsFMZa9euXfjKysoiEokUvv/FF19QqVIlXnzxRTp16kR6ejpvv/02p556Kv3799/m41x44YX86U9/Knw/Ho8zduxYGjVqRLly5WjXrh0TJ07cpfMnSZIklQYJteywYMEC3n77bTIyMpg0aRKrVq3i3HPPZfXq1Tz44IPbPWbs2LFcc801u/05NxfE2Pvql3f7+D/i82v7UD5tz/wnGj16NDfffDONGzemSpUqO3XM2LFjeeyxx7jnnnto1qwZ06ZN4+STT6ZGjRoceOCBeySXJEmSlAgSqjjF43EikQiPP/44WVlZANx6660cf/zx3HXXXZQrV+5Xx1x22WWMGjWq8P2cnByys7OLLXNJce2113LIIYfs9P55eXnccMMNvPbaa3Tv3h2Axo0b8/bbb/Pvf//b4iRJkqQyJaGKU506dahXr15haQJo1aoVQRDw3Xff0axZs18dk56eTnp6+m5/znKpyXx+bZ/dPv6PKJeavMc+VufOnXdp//nz57Np06Zfla38/Hw6dOiwx3JJkiRJiSChilPPnj2ZMGECGzZsKLzhwZdffklSUhL169cvks8ZiUT22LhcmCpUqLDN+0lJSb+6hqqgoKDw7Q0bNgDwwgsvUK9evW32+yNFVJIkSUpEod4cYsOGDcyePZvZs2cDsHDhQmbPns2iRYuArWN2Q4YMKdx/8ODBVKtWjWHDhvH5558zbdo0LrnkEk477bTtjunpt9WoUWObu/EBhf8dAPbee2/S09NZtGgRTZs23eZVFkcdJUmSVLaFupQyc+ZMevXqVfj+j9ciDR06lIceeojvv/++sETB1ttqv/rqq4wYMYLOnTtTrVo1BgwYwPXXX1/s2RPdQQcdxD/+8Q8eeeQRunfvzmOPPcann35aOIZXqVIlLr74YkaOHEk8Hme//fZj/fr1TJ8+nczMTIYOHRryVyBJkiQVn1CL05/+9KffveX2Qw899KttLVu25NVXXy3CVGVDnz59uOqqq7j00kvZsmULp512GkOGDGHOnDmF+1x33XXUqFGDsWPHsmDBAipXrkzHjh25/PLLQ0wuSZIkFb9IsLMPCyolcnJyyMrKYv369WRmZm7zZ1u2bGHhwoU0atSIjIyMkBImLs+fJEmSEsnvdYNfSqgH4EqSJElSGBL/dnGSJEmS9pggCIjFA2JBQDwO0XiceBxiQbDN27HY1n1i8Z9e8SAg+vO3Y1v/9+f7bP24Ad2bVKNy+bSwv9ydZnGSJEmS9oAtBTFWbchj1YZ8VuXmsXpjHnnR+HZLQzS+9X9jwc/ejkMsHv+hjPzwdpztFo/YL8rJNh/39/b/xT4/z/HTxyye8zXp3B50aGBxkiRJkhLexrzoD2Uoj5W5+YVvr9qQx6pt3s9nQ1407LjFIiUpQlJShJSkCMmRn95O+uH95KRfvH61D6QkJSXcs1ITK20xKWP3y9hjPG+SJKmkC4KAnC0/lKHcH1aHflaGfixHqzduLUabC2I/HklFNlM5soEqbKBKJJcq5LJPZANVIhuoTC5VUjdQLbKB6slbt1UKNpBMrPBzR343WaTwf35/v18dscONO/V5f/7W7xzwux8r+OEV/91P+JPoC0Dnndw5fBann0lNTQVg06ZNPlB3N2zatAn46TxKkiQVh3g8YN3mgsIytHLDzwpRbh6rN+ZvU5SisShZ/Fh4fihBkQ1UIZfsH0tQZANVI7lUTttA1cgGKkc2kMpOrij9WCB2R1n6d+gE+0d3i9PPJCcnU7lyZVasWAFA+fLliUR2tvOXXUEQsGnTJlasWEHlypVJTk4OO5IkSUpwsXhQuOrz8xWh1RvyfypGuXmsy91AsGkNmUHOtkWIXKpGNtDkhyJUNZK79c9SNpCVspGkyG7+0p6SAeWrQbmqUL7KD/9bDcpX/eHtqj/9ebnKkJw41/AUu4o1w06wSyxOv1C7dm2AwvKknVe5cuXC8ydJkvRL+dH4T2Vo4y9G5XK3kJu7noLc1cQ3riJ5y1oqs4HKkZ9KT63IBlqSW7hCVJkNVIxsgd3tJulZPys/VX9RgqpsW4J+/PO08nv0nChxWJx+IRKJUKdOHWrWrElBQUHYcRJGamqqK02SJJVBsXjA9+s3F64AbS1Bm9m4fg2bc1YSzV1JsGkNkc1rSS9YR9VILlXYOvpWnw3s87NilB752SjcLpShIJIE5aoQ+WXJKf/Lt3/+51Ug2csLtPMsTr8hOTnZIiBJkvQLWwpifPLdej798ity58+g4soPaRD7jiqRXBqRS8dILllsJHl7o3A70VPiSWnEMqoQqVCN5ArViPxqJejnJWjrqlAkPQuSkvb8Fyv9jMVJkiRJv2ndpnxmLVjBornvE1v0HrXWf0I7vqJr0sqfdvqNf2vOT65AQXplgnJViZSvSkrF6qRVqkakfPVtx+F+VoySUsuT5DXmKoEsTpIkSQK23vDpu7WbmTNvHmu/mE7q9zNpuOVzekYWcHDkh0sYfljYiRNhfcUmBPU6k9W4M8mVam1bgspVIS0lbbcvP5JKGouTJElSGRWLB8xbspqFn85g88J3yVr1Ea1i8zg8suqnnX4oSpuSK7G+WnvKNdqXrGY9SKrfiSoZWeEEl0JgcZIkSSojthTE+HzeF6z4/C2C7z6gds4c9g4WsHfkZzfEikCMJFaVa0x+nU5Uad6Tik17UL5qE8p7HZHKMIuTJElSKbV2fS5fffIOOV9Np9zyWTTaMpeOkdXb7hSB3KRMVlVuS3KDbtRqtR/pDbtQK71SOKGlEsriJEmSVAoEQcD3i+az+JM3Kfj2faqunU2T6Nd0/fktvn9YTVqa3piNNTpQsUl3arc+gEo1mlLJGzJIv8viJEmSlIBi+ZtZ9OkMVn3xFilLZ1Jvw6fUZQ11f75TBNZFMllasQ3xel2o0Wo/arbcl2xXk6RdZnGSJEkq6YKALau/ZfHHb7BxwbtUWvkRDfK+olEkRqOf7RYNkvg2tTHrqrYjrWE3stv+icr1mlPZ1STpD7M4SZIklTQFm8ld8D7ff/Y2weL3qLF+DlXja2j2830isDrI4pvyrdlSqyOVm/ekcdv9aFIxM6zUUqlmcZIkSQpTEBCs/YY186az7svppC/7kNqbv6ISMX4+UFcQJPNVUkNWZLUlKbsrtVvvT5NmremU7J3upOJgcZIkSSpO+RuJffchq754m7yF71F5zWwyY2upBlT72W4rgsrMS21JbvWOVGiyL03a9qRVzWrs7didFAqLkyRJUlEJAli7kPxv3mPNvLdJWjKTahu+JJk4tX62W36QzNygIYsrtCZatwvVWu5H61at2b9iemjRJW3L4iRJkrSn5G2ApR+yacG7bJj/DhVWzqZCdC1pQO2f7bYsqMInNGd1lXak7tWV7NY9aNeoNu1Sk8NKLmkHLE6SJEm7IwhgzQKCxe+xYf4MYoveJzPnS5KIUx4o/8NueUEKnwUNmZfSkk21OpLZrCetW7Ti4DqZJCc5diclCouTJEnSzsjbAEtmEl/8ARvmv0Pasg/JKFhHBLa5icPSoCofxpuxuPw+UL8LdVt1pWPjOnSoUo6I1ydJCcviJEmS9Hu+/5gt0+8h5fOnSYnnkQT8eMPvvCCVOUEjPg6asqZKe8o13peWzVvSc68qVKmQFmZqSXuYxUmSJOmXYgXw+bNsevsuyi+fRcYPm5cE1fgw3ozPklqSX6cjNZp1oWOjWpyUXZkMr0+SSjWLkyRJ0o9ylxOf+QD5791PxpaVlGfr85OmxLvxTrVj2btLb7o0qsbhtSt5fZJUxlicJElS2RYE8N0HFMy4m6S5z5EcRMlg63OUxsUPZnnzwRx3YCf+3qBK2EklhcjiJEmSyqaCLfDp0+S9czfpK+eQ+sPmmfHmTEzuS/WuJ3BSz6bUySoXakxJJYPFSZIklS3rFhN8cD/RmQ+RmreWdLbe5OHZWA/eqNyf/Q/ozZj29SiX5jVLkn5icZIkSaVfEMA3bxF7999E5k0hiTipbL3Zw2PRQ1ja+AROOKA9dzat5i3DJW2XxUmSJJVeeRvgk/EUvPtvUlfP48c1pOmx1oyLHEaNTkdzSs+mNKpeIdSYkko+i5MkSSp9Vn8NH/yH6IePkpKfSyqwKUjnmdh+vFzhKA7c7wD+1iWbzIzUHX4oSQKLkyRJKi3icfh6KvH3/k1k/mtECEgBFsZr8WjsUBbWP5oTD2jDQ61qeStxSbvM4iRJkhLblvXw0ePE3ruX5HULSfph8/9i7Xki6EOVtn05db/GtK6bFWpMSYnN4iRJkhLTirnw/r3EZ48jKbqJZCAnKM9TsQN5IeMI/rTfvozt1oAaldLDTiqpFLA4SZKkxBGLwpcvErx3L5FvpgGQBMyL1+eR2KF8WetwBu3XinFt65Ce4u3EJe05FidJklTybVwNHz5M/IP7Scr5jggQCyK8Eu/Mo7FDqbz3QZy2X2M67VXF24lLKhIWJ0mSVHItnQ3v30cwZwKRWB5JwJqgIk/GDuLZlMPo1b0jN3Xfi/pVyoedVFIpZ3GSJEklSzQf5j5H8P69RBa/B0AEmBNvyMOxPsyp0puT92vB5I71KJ/mrzKSioffbSRJUsmQuwxmPkgw80EiG5cTAfKDZKbEu/FI9FAqNu3Bafs14qZmNUjyduKSipnFSZIkhScIYPH78P69BJ9PJhKPEgGWB5V5PNqbSUmHcGCn1tzUoyFNa1YKO62kMsziJEmSil/BZvj0aXj/Xvj+Y2DrON4H8eY8HO3DJxX346SDmvF8lwZklU8NN6skYXGSJEnFad0i+OB+gg8fIbJ5DQBbglSejfXkkdihlGvQgdP2a8Tte9ciJTlpBx9MkoqPxUmSJBWtIICF07aO482bQiSIEwG+C6rzaPQQnqEX+7VtwdieDWlbv3LYaSVpuyxOkiSpaORtgE/Gwfv3wcovgK3jeG/HWvNwrA+zM7oxqGcjXth3L2pmZoSbVZJ2wOIkSZL2rNVfb3320uzHieTlALAxSOfp2AE8EjuE1Np7c1rPhvyrXV0yUpNDDitJO8fiJEmS/rh4HOa/Bu//e+v/snV1aUG8No/EDuWZ+AHs26oR1+/XiG6NqhKJeDtxSYnF4iRJknbf5nUw+/Gt43hrFwIQJ8LrsfY8HDuU2akdOKH7XjzfvSENqpUPN6sk/QEWJ0mStOuWf771Zg+fjCdSsAmAnKA842N/4tHYISRVbcSpPRpyV+dsKqb764akxOd3MkmStHNiUZg3Zeuzl755C9g6jvdFPJuHY4cyOdaTTk3rM6ZnQ3q1qElSkuN4kkoPi5MkSfp9G1fDhw/BBw9AzncAREnilVhnHokdykdJrTm2U30m92hEi9qVws0qSUXE4iRJkrZv6Ufw3r3w6dMQywNgTVCJJ2IH8Xi0N/HMugzp3pC7ujagaoW0kMNKUtGyOEmSpJ/ECuCzyVvH8b57v3Dzx/HGPBw9lBfi+9IquyaX7deIvvvUJjU5KbysklSMLE6SJGmrpbNh8rmw4jMACkjh+Vg3Ho724dNIU/q2qcuTPRvSsUGVcHNKUggsTpIklXXRPJj2D4K3biUSxFgbVOKBaB/GxQ6ioHwNBvdswN3d96JOVrmwk0pSaCxOkiSVZUs+hGeHw4rPiQDPx/bl6oJTqV6rLqN6NqJ/+3qUS0sOO6Ukhc7iJElSWRTNgzduJJj+TyJBjFVBJlcWnMaM9J5cc2xrjm5fl0jE24lL0o9CvaJz2rRp9OvXj7p1t35znjx58k4fO336dFJSUmjfvn2R5ZMkqVT6bhb8+wB4e+to3nOx7hySdxPRFv14deQB9O9Qz9IkSb8Q6orTxo0badeuHaeddhrHHnvsTh+3bt06hgwZwsEHH8zy5cuLMKEkSaVIwRZ44waCd/5FJIizMsjausqU1p1rjm1N//YWJkn6LaEWp759+9K3b99dPu7ss89m8ODBJCcn79IqlSRJZdbiD+DZc2HVl0SASbGeXFMwhI4tm/DqsW2olZkRdkJJKtES7hqnBx98kAULFvDYY49x/fXXhx1HkqSSrWAzvP43ghl3EgnirAgqc0XBabybui9XH783x3eq7yqTJO2EhCpOX331FaNHj+att94iJWXnoufl5ZGXl1f4fk5OTlHFkySpZFn03tZVptXziQBPx/bn2oJTaN+8Ea8c18bbi0vSLkiY4hSLxRg8eDDXXHMNzZs33+njxo4dyzXXXFOEySRJKmHyN/20ykTA8qAKlxWczvupXbnquFYM6JztKpMk7aJIEARB2CEAIpEIkyZNon///tv983Xr1lGlShWSk396lkQ8HicIApKTk3nllVc46KCDfnXc9lacsrOzWb9+PZmZmXv865AkKVTfztj6XKY1XwMwIXoA10VPpm3Thvz9+LbUq+wqkyT9KCcnh6ysrJ3qBgmz4pSZmcmcOXO22XbXXXfxv//9j4kTJ9KoUaPtHpeenk56enpxRJQkKTz5m2DqtQTv3UOEgGVBVUYXnM4HKZ254pi9GdTVVSZJ+iNCLU4bNmxg/vz5he8vXLiQ2bNnU7VqVRo0aMBll13GkiVLeOSRR0hKSmKfffbZ5viaNWuSkZHxq+2SJJUp30zfusq0diERYHz0T/wtehL7NGnAS8e1Jbtq+bATSlLCC7U4zZw5k169ehW+P2rUKACGDh3KQw89xPfff8+iRYvCiidJUsmWvxFeuwbe/zcA3wfVGF1wBu8nd+Tyo1tyUre9SEpylUmS9oQSc41TcdmVOUZJkkqshW/Bc+fB2m8AeCLai7HRk9i7UX3+cXw7GlRzlUmSdqRUXuMkSZKAvA3w2hj44D/A1lWmSwvO5IPk9ozu15Ih3Ru6yiRJRcDiJElSoljw5tZVpnVbx9gfjx7M2OggWjWsx0vHt6Nh9QohB5Sk0sviJElSSZeXC69eDTMfAGBJUINLC85gZlI7Lj2yJaf2aEiyq0ySVKQsTpIklWRfvw7PnQ/rt64yPRI9hL9HT6RFgzpMOaEdTWpUDDmgJJUNFidJkkqiLTnw6lUw6yEAvqMml+SfyaykNlx8eHNO36+xq0ySVIwsTpIklTTzp25dZcr5DoCHoodyU/REmmXXZsoJbWlas1LIASWp7LE4SZJUUmxZDy9fAR89CsBianFx3ll8lNSakYc158z9G5GSnBRySEkqmyxOkiSVBF+9Cv+9AHKWAPBgtA83RQfStF4tnh/Qjua1XGWSpDBZnCRJCtPmdVtXmWY/BsAianNR3lnMTmrFhX2a8+cDGrvKJEklgMVJkqSwfPny1lWm3O+JE+GB6GHcHB1Ak7o1eO6EdrSq8/tPsZckFR+LkyRJxW3zWnjpcvj4CQC+pQ6j8s7i40hLRvRuxrm9mpDqKpMklSgWJ0mSitO8F+G/F8KGZcSJ8J/o4dwSPYFGtavx7IB2tK6bFXZCSdJ2WJwkSSoOm9bAS6Phk/EAfEPdH1aZWjD84Kac16spaSmuMklSSWVxkiSpqM19Hp4fCRtXECeJe6OHc1v0eBrWqsbkE9rRpr6rTJJU0lmcJEkqKpvWwJRL4NOJACygPqPyzuITmnJOryacf3Az0lOSQw4pSdoZFidJkorC58/BC6Ng40riJHFP9Ej+GT2WBjWrMumEdrTLrhx2QknSLrA4SZK0J21ctXWV6bNnAPiabEbmncWnNOGsA5twYe9mZKS6yiRJicbiJEnSnvLZZHjhIti0ihjJ3B09kv+LHkv9GpWZeEI7OjaoEnZCSdJusjhJkvRHbVgJUy6GzycDMD/SgAu3nMVnNObMAxoz6pDmrjJJUoKzOEmStLuCYOtI3pRLYNNqYiRzR/Qo7oz2p171ykw4vi2dG1YNO6UkaQ+wOEmStDs2rNh684e5/wXgq8heXLjlLD6nEcN6NuKSPi0ol+YqkySVFhYnSZJ2RRDAp09vXWXavIYYyfwrejR3RvtTt1om449vR9dGrjJJUmljcZIkaWflLt+6yvTF8wB8GWnEhVvO5POgIaf2aMilh7WgfJo/WiWpNPK7uyRJOxIEMGfC1lWmLeuIRlL4Z35/7o4dRe0qlXjy+HZ0b1It7JSSpCJkcZIk6ffkfA/Pj4QvXwRgXqQxF2w5iy+CBpyy716M7tuSCun+OJWk0s7v9JIkbU8QwMfj4KW/wJb1xCIp3Jp/LP+OHUmtypV4/Pi29GxaPeyUkqRiYnGSJOmXcpbCfy+Er14G4IukJpy/+Sy+DLIZ1LUBlx/ekkoZqeFmlCQVK4uTJEk/CgKY/QS8dBnkrScaSeWWguO4N3oEtbIq8MhxbTmgeY2wU0qSQmBxkiQJYP0S+O8FMP9VAOYmNWPE5jOZH9RnYOdsrjiyFZmuMklSmWVxkiSVbUEAHz0KL18BeTlEI2ncXHAc90UPp3pmeR48ri29WtQMO6UkKWQWJ0lS2bVuMfz3fPj6fwB8ntScEZvP5OugHsd3qs9VR+5NVjlXmSRJFidJUln14SPw0uWQn0tBJJ1/FBzHf6KHU71SOe4/tg0Ht6oVdkJJUglicZIklS1BAK9eBe/8C4DPklsyYtMZLAjqckyHeozptzeVy6eFHFKSVNJYnCRJZUcsunU0b/bjANwaPYE7thxN1YrluPeYfTi0de2QA0qSSiqLkySpbCjYDBOGwZcvEiOJ0QVnMCH2J45qV5drjmpNlQquMkmSfpvFSZJU+m1eB08OgkXvkB9J49y8EbwZ6cxtA9tyTIf6YaeTJCUAi5MkqXTLXQaPHQfLP2VjpALDtoxiTso+/OeUThzow2wlSTvJ4iRJKr3WLIBHj4G137A6UoWTt1zK9+Wa8vipXejYoErY6SRJCcTiJEkqnb7/ZOtK08YVfBepzaAtf6Gg0l5MOL0rzWpVCjudJCnBWJwkSaXPN29vvaYpL4d5NOTkzZdSqXo9njy9K/WrlA87nSQpAVmcJEmly9znYeJpEMvjg6AVp+VdRMN6dXhoWBeqVUwPO50kKUFZnCRJpceHj259TlMQ59V4F87LH06nJnW4d0hnKqb7I0+StPuSwg4gSdIfFgTw9m3w3HkQxBkf+xNn559Pr9YNeHBYF0uTJOkP8yeJJCmxxePw6lUw4w4A7ooexU3RgQzq2oDr+7chOSkSckBJUmlgcZIkJa5YATw3Aj5+EoDrCk7i/tgRDO/VhIsPbUEkYmmSJO0ZFidJUmLK3wQTh8GXLxEjmUvyz+SZ+AFceUQrzti/cdjpJEmljMVJkpR4Nq+FJ06Exe+SH0nj7LzzeZNO3HJCW47rVD/sdJKkUsjiJElKLDnfw2PHworP2RCpyKlbRjEneW/uPakjB7eqFXY6SVIpZXGSJCWO1V/Do/1h3SJWR6oyeMulLE1vzGOndqFLw6php5MklWIWJ0lSYlg6Gx47Djat4rtIHU7c8hfyKmbz1GldaVUnM+x0kqRSzuIkSSr5Fk6DJwdDfi5f0IiTNl9KxWp1ePq0bjSoVj7sdJKkMsDiJEkq2T5/Dp4+HWL5vBe05vS8kWTXqc3Dp3WhZqWMsNNJksoIi5MkqeSa9RA8PxKCOC/Hu3J+/rm0a1ib+4Z2JqtcatjpJElliMVJklTyBAG8dQv87zoAxsUO4vKC0zioVR3uGNyBjNTkkANKksoai5MkqWSJx+GVK+DduwC4I3o0N0cHcFzHbP5+XBtSkpNCDihJKossTpKkkiNWAM8Oh0/GA3BtwSk8EOvLmfs34rK+rUhKioQcUJJUVlmcJEklQ/5GeGoozH+VGMlclP9nJsf3Y3Tflpx9YJOw00mSyjiLkyQpfJvWwBMD4bv3yY+kc1be+UwLOvD349owsEuDsNNJkmRxkiSFLGcpPHosrJzLhkhFhmy5mE+TW3LXiR04bJ/aYaeTJAmwOEmSwrRqPjzaH9YvZnWkKiduGc33aQ15eEhnujepFnY6SZIKWZwkSeFY8iE8fjxsWs2iSF0Gbf4LWyrUY9xpXdmnXlbY6SRJ2kao93SdNm0a/fr1o27dukQiESZPnvy7+z/zzDMccsgh1KhRg8zMTLp3787LL79cPGElSXvOgjfg4X6waTVzI03ov/lqqNyACWd3tzRJkkqkUIvTxo0badeuHXfeeedO7T9t2jQOOeQQpkyZwqxZs+jVqxf9+vXjo48+KuKkkqQ95rPJ8PgJkL+Bd2nD8Zsvp3qtujx9Tg8a16gYdjpJkrYrEgRBEHYIgEgkwqRJk+jfv/8uHde6dWsGDhzI1VdfvVP75+TkkJWVxfr168nMzNyNpJKk3TbzAXh+FBDwUtCN8/POZZ8GNXjg1C5ULp8WdjpJUhmzK90goa9xisfj5ObmUrVq1d/cJy8vj7y8vML3c3JyiiOaJOnnggCm3QyvXw/AE7GDubJgGAe0qMVdJ3WkfFpC/ziSJJUBoY7q/VE333wzGzZsYMCAAb+5z9ixY8nKyip8ZWdnF2NCSRLxOLz4l8LS9M/oMVxecBr92tfnviGdLU2SpISQsMXpiSee4JprruGpp56iZs2av7nfZZddxvr16wtfixcvLsaUklTGRfPhmTPh/X8DMKZgKLdFT+DUHo24bUB7UpMT9seQJKmMSch/5hs3bhxnnHEGEyZMoHfv3r+7b3p6Ounp6cWUTJJUKH8jjD8Fvp5KjGRG5p/Dc/EejDqkOSMOakokEgk7oSRJOy3hitOTTz7Jaaedxrhx4zjiiCPCjiNJ2p5Na7beOW/JTPIiGZyVdwHTgnZc138fTtl3r7DTSZK0y0ItThs2bGD+/PmF7y9cuJDZs2dTtWpVGjRowGWXXcaSJUt45JFHgK3jeUOHDuWf//wn3bp1Y9myZQCUK1eOrCyf+yFJJcL67+DRY2HVPHKTKjFk88V8mtScf53YniPb1g07nSRJuyXU4fKZM2fSoUMHOnToAMCoUaPo0KFD4a3Fv//+exYtWlS4/7333ks0GmX48OHUqVOn8HXBBReEkl+S9Asrv4T7+8CqeaxKqs4xm69iXmpLHji1i6VJkpTQSsxznIqLz3GSpCLy3Sx4/HjYvIZFSfU4cdNf2Fy+Dg8O60r77Mphp5Mk6VfKzHOcJEklxNf/g3EnQ8FGPo805aRNF5ORVZMJp3elac1KYaeTJOkPszhJkv6YT5+BZ86CeAHv0obTN19IrRrVefT0btSrXC7sdJIk7REWJ0nS7nv/PphyCRDwYtCdC/LOplX96jw4rCtVK6SFnU6SpD3G4iRJ2nVBAG/+Hd4YC8BjsUO4umAoPZrW5J5TOlEx3R8vkqTSxZ9skqRdE4/Di5fCB/cBcFv0OP4ZPZbD29ThtoHtSU9JDjmgJEl7nsVJkrTzovkw6c/w2TMERLi6YCiPxg7lpG4NuPbofUhOioSdUJKkImFxkiTtnLwNMP5kWPA6sUgKF+Sdw/Px7px/UFNGHtKcSMTSJEkqvSxOkqQd27ganjgBlswiL5LBGXkX8la8LWP67c2wno3CTidJUpGzOEmSft+6xfDYsbDqS3KTMjl588V8FmnG7QPb0b9DvbDTSZJULCxOkqTftnIePHoM5CxhZVINTtx8KUtSsrnvpE70alkz7HSSJBUbi5Mkafu+mwmPHw+b1/JtUjYnbrqUjRm1eOzULnRuWDXsdJIkFSuLkyTp1+a/BuNPgYJNfBZpzkmbLiKtUnWeOr0rLWtnhp1OkqRiZ3GSJG1rzkSYdDbEC5gRacfpmy+gZrWqPHp6N7Krlg87nSRJobA4SZJ+8t69Wx9uS8CUoAcXbDmb5nWr8tCwrtSolB52OkmSQmNxkiRBEMAbY+HNvwPwaLwPV+efQtdG1blvaGcyM1JDDihJUrgsTpJU1sVjMOVimPkAALdGj+f/osdw6N61+b9BHchITQ45oCRJ4bM4SVJZFs2DZ86CzycTEOGqglN5LHYIAzrX54Zj2pCSnBR2QkmSSgSLkySVVXm5MO4kWPgmsUgKI/LOZUp8X/58YGNGH9aSSCQSdkJJkkoMi5MklUUbV219RtPSj8hLKsdpWy5kerwNlx/ekrMOaBJ2OkmSShyLkySVNesWwaPHwOr55CZlcdLmi/ks0pSbjm/DgM7ZYaeTJKlEsjhJUlmyYi48eizkLmVlck0GbrqU75Lrc8/gjhyyd62w00mSVGJZnCSprFj8Pjx+AmxZx7dJDRiw8VI2pdfkkaGd2bdxtbDTSZJUolmcJKks+OpVeGoIFGzi06QWnLTpIlIrVuXJYV3Zp15W2OkkSSrxLE6SVNp98hRMPgfiUaZHOnDGphFUr1qFR0/rRsPqFcJOJ0lSQrA4SVJpNuth+O/5ADzPfly4+Sya1q7CI6d1pWZmRsjhJElKHBYnSSqtvnoNnh8JwCPxwxiTfzKd9qrG/UO7kFU+NeRwkiQlFouTJJVGy+bAhKEQxHg6dgBXF5zCQS1rcefgjpRLSw47nSRJCcfiJEmlzfol8PgAyN/AjHhrRhecwTEd6nPT8W1JTU4KO50kSQnJ4iRJpUleLjwxEHKX8jX1+HP+hfTaux43n9CO5KRI2OkkSUpY/tOjJJUWsShMOBWWz2ENWQzNu5RG9evyzxM7WJokSfqDLE6SVBoEAbx4Ccx/jTzSOTXvYqjcgP8M7eI1TZIk7QGO6klSafDOv2DmA8SJMCL/XL5Jb8Ezw7pQo1J62MkkSSoVLE6SlOg+mwyvXgXA9QUn83qkKw+f0ommNSuFm0uSpFLE4iRJiWzx+zDpzwA8FD2UB2KHceuAtvRoUj3kYJIklS5e4yRJiWrNAnjyRIhu4bV4R66NDuHC3s05tmP9sJNJklTqWJwkKRFtWrP1WU2bVvNZ0Ijz88+jf8dsLji4WdjJJEkqlSxOkpRoonkw/mRY/RXLqM6peRfTrnE9bjy2LZGItx2XJKkoWJwkKZEEATw7HL6dzkbKMyTvEirXzOaeUzqRluK3dEmSioo3h5CkRPL6DTBnAlGS+XP+Bayp0JRJp3Yhq1xq2MkkSSrVLE6SlCg+egym3QTA5QWnMTO5HeOHdia7avmQg0mSVPpZnCQpESx4A/57AQB3RI9mQrwX/x7cgXbZlUONJUlSWeFAvCSVdCvmwvghEI/ybKwHt0RP4Ooj9+bQ1rXDTiZJUplhcZKkkix3OTx+AuStZ2bQgksK/sypPRszrGejsJNJklSmWJwkqaTK3whPDoT1i/mWOpyRN4oD967PlUfsHXYySZLKHIuTJJVE8Rg8fQYs/Yj1VGJI3iU0qF+ff57YnuQkn9UkSVJxszhJUkn08hUwbwr5pDIs7yKiWY34z9DOlE/znj6SJIXBn8CSVNK8ew+8dzcAI/PP4av0vXlmWBdqVsoIOZgkSWWXxUmSSpIvpsBLowG4seBEXol05+GTO9GsVqWQg0mSVLZZnCSppFjyITx9OhDwRPQg7on14+YT2tKjafWwk0mSVOZ5jZMklQTrFsETA6FgE9PibbkqOowLDm7O8Z3qh51MkiRhcZKk8G1eB48PgI0r+DJowLn553N0hwZc2LtZ2MkkSdIPLE6SFKZoPjw1BFbOZQVVGZp3CW0aZ3PjcW2JRLztuCRJJYXFSZLCEgTw/EhY+CabyWBY3sVUqLkX95zcibQUvz1LklSSeHMISQrLWzfD7MeIk8Q5+SNYXqE5k07tQlb51LCTSZKkX7A4SVIYPpkA/7segKsLhvJucifGDe1CdtXyIQeTJEnbY3GSpOL2zXR49lwA7o0ewePxQ7hncAfaZ1cON5ckSfpNDtFLUnFa9RWMGwyxfKbEujI2OoirjtibPq1rh51MkiT9DouTJBWXjavg8eNhyzpmB00ZWXAuQ3s05rT9GoWdTJIk7YDFSZKKQ8FmeHIQrP2G76jJ6XkXsX+rbK46cu+wk0mSpJ1gcZKkohaPw6Q/w3fvk0NFhuZdQt16Dfi/Qe1JTvJZTZIkJYJQi9O0adPo168fdevWJRKJMHny5B0e88Ybb9CxY0fS09Np2rQpDz30UJHnlKQ/ZOpf4fNniZLCmXkj2ZLVlPtP7Uz5NO/PI0lSogi1OG3cuJF27dpx55137tT+Cxcu5IgjjqBXr17Mnj2bCy+8kDPOOIOXX365iJNK0m6a+QBM/ycAF+efxefpbXhwWBdqVsoIOZgkSdoVof5zZ9++fenbt+9O73/PPffQqFEjbrnlFgBatWrF22+/zW233UafPn2KKqYk7Z6vXoMXLgbg1oLjeZ79eeTkTjSvVSnkYJIkaVcl1DVOM2bMoHfv3tts69OnDzNmzPjNY/Ly8sjJydnmJUlFbtkcmDAUghgTYwfwf7FjuPG4tvRoWj3sZJIkaTckVHFatmwZtWrV2mZbrVq1yMnJYfPmzds9ZuzYsWRlZRW+srOziyOqpLJs/RJ4fADkb+CdeGsuKziD8w9uzvGd6oedTJIk7aaEKk6747LLLmP9+vWFr8WLF4cdSVJplpcLTwyE3KXMD+pzdv6F9OuwFyN7Nws7mSRJ+gMS6pZOtWvXZvny5dtsW758OZmZmZQrV267x6Snp5Oenl4c8SSVdbEoTDgVls9hNZU5Nf8S9m6czY3HtSUS8bbjkiQlsoRacerevTtTp07dZturr75K9+7dQ0okST8IAnjxEpj/GltIZ1jeRaRXb8i/T+5MWkpCfauVJEnbEepP8w0bNjB79mxmz54NbL3d+OzZs1m0aBGwdcxuyJAhhfufffbZLFiwgEsvvZQvvviCu+66i6eeeoqRI0eGEV+SfvLOv2DmA8SJcH7+uSyt0IqHhnUlq3xq2MkkSdIeEGpxmjlzJh06dKBDhw4AjBo1ig4dOnD11VcD8P333xeWKIBGjRrxwgsv8Oqrr9KuXTtuueUW/vOf/3grcknh+mwyvHoVANcXnMy05G78Z2gXsquWDzeXJEnaYyJBEARhhyhOOTk5ZGVlsX79ejIzM8OOIynRLX4fHu4H0S08GO3DtbEh3H1SZw7bp3bYySRJ0g7sSjdw8F6SdteaBfDkiRDdwquxjlwXPYUrj2htaZIkqRSyOEnS7ti0Zuuzmjat5tOgERcUnMeQHo05rWfDsJNJkqQiYHGSpF0VzYPxJ8Pqr/ie6gzLu5gerRpw1ZF7e9txSZJKKYuTJO2KIIBnh8O309lAeYbmXULteg35v0EdSE6yNEmSVFol1ANwJSl0r98AcyYQJZk/51/AxqzmPDa0M+XT/HYqSVJp5k96SdpZHz0G024C4LKC0/kktQNPD+tCzcyMkINJkqSiZnGSpJ2x4A347wUA3BE9mklBLx4+pRPNa1UKN5ckSSoWFidJ2pEVc2H8KRCP8mysB7dET+Cm49vQs2n1sJNJkqRi4s0hJOn35C6Hx0+AvBw+iLfgkoI/M+Kg5pzQOTvsZJIkqRhZnCTpt+RvhCcHwvrFfBPU4cz8URzRoSEjD2kedjJJklTMLE6StD3xGDx9Biz9iLVkMjT/Elo02osbj2vjs5okSSqDLE6StD0vXwHzppBPKqfnjSK5ehPuPaUz6SnJYSeTJEkh8OYQkvRL794D790NwMj8c/i2/D5MOrUrWeVTQw4mSZLCYnGSpJ/7YgrBS6OJADcWnMhrST0YN7QzDaqVDzuZJEkKkcVJkn605EN4+nQiBDwRPYh/x/tx90nt6dCgStjJJElSyLzGSZIA1i2CJwZCwSbejLXlqugwrjh8bw7bp07YySRJUglgcZKkzevg8QGwcQVfBA0YXnA+J3VvzOn7NQo7mSRJKiEsTpLKtmg+PDUEVs5lBVU5Ne8SurVsyNVH7u1txyVJUiGLk6SyKwjg+ZGw8E02k8GwvIupXq8R/zeoAynJfnuUJEk/8eYQksqut26G2Y8RJ4lz8kewNrMlk4d2oUK63xolSdK2/O1AUtn0yQT43/UAXF0wlFmpXZg4rCs1MzNCDiZJkkoii5Oksueb6fDsuQD8O3oE44JDeejkTrSoXSnkYJIkqaSyOEkqW1Z9BeMGQyyfKbGu3BgdxN+Pa8N+zaqHnUySJJVgXv0sqezYuAoePx62rGN2vCkjC87lvIOaM6BLdtjJJElSCWdxklQ2FGyGJwfB2m/4LqjJ6fkXcVj7how6pHnYySRJUgKwOEkq/eJxmPRn+O59cqjI0PxLaNKoETcd39ZnNUmSpJ1icZJU+k39K3z+LAWkcGbeSILqzbn3lE6kpySHnUySJCUIbw4hqXSb+QBM/ycAl+Sfxfzy7Zh0alcql08LOZgkSUokFidJpddXrxG8cDER4NaC43kx6QCeHNqZBtXKh51MkiQlGIuTpNJp2RyYMJRIEGNi7AD+FT+Guwa3p2ODKmEnkyRJCchrnCSVPuuXwOMDIH8D0+OtuazgDK44fG/6tqkTdjJJkpSgLE6SSpe8XHhiIOQu5augPufkX8iJ+zbh9P0ahZ1MkiQlMIuTpNIjFoUJp8LyOayiMsPyL6Fzy0aM6be3tx2XJEl/iMVJUukQBPDiJTD/NbaQxml5F5FVpwn/GtSBlGS/1UmSpD/Gm0NIKh3e+T+Y+QBxIozIP49Vma2ZdGoXKqT7bU6SJP1x/kYhKfEteJPg1TFEgOsLTubd1H2ZMKwLtTIzwk4mSZJKCYuTpMS2YSU8cyYRAsZH/8QjQV8ePLkjLWtnhp1MkiSVIg7+S0pc8ThMPgc2LOereD3GRIfyt2PasH+zGmEnkyRJpYzFSVLievdOmP8qW0jlvIIRDOrZgoFdGoSdSpIklUIWJ0mJacksgtf+CsC1BUNIrbsPo/u2DDeTJEkqtbzGSVLi2bIeJp5GJB7lhVhXnks5lOcHdSQ9JTnsZJIkqZRyxUlSYgkC+O+FsPYbvguqc1nBmfztmDY0rF4h7GSSJKkUszhJSiwfPQqfPUOUZEbkj6Bv55Yc3b5e2KkkSVIpZ3GSlDhWfEEw5VIA/lEwgA01OvDXo1qHHEqSJJUFXuMkKTEUbIaJw4hENzMt1oaHI/14dnBHyqV5XZMkSSp6rjhJSgwvXQYrPmdlkMWognMZc1QbWtSuFHYqSZJURlicJJV8n02CWQ8SJ8KFBeeyb9uWnNglO+xUkiSpDHFUT1LJtvYbgufOJwLcHe3H4srduOfYNkQikbCTSZKkMsTiJKnkihXAxNOJ5OUwK96MO4ITGD+4A5UyUsNOJkmSyhhH9SSVXP+7HpbMZH1QgQsKzuOiw/ahbf3KYaeSJEllkMVJUsk0fypMvx2AvxScSYsWrTl9v0bhZpIkSWWWo3qSSp7c5TDpzwA8Gu3N7IoHMOWEdl7XJEmSQmNxklSyxOMw6SzYuJK58QbcEDuZhwd1oGqFtLCTSZKkMsxRPUkly/TbYMEbbArSOa9gBOf03oeujaqGnUqSJJVxFidJJcei9wj+9zcAxkSHUqtxW4b3ahpyKEmSJEf1JJUUm9fC06cTCWJMjvXgf+mH8OLA9iQneV2TJEkKn8VJUviCAJ4bAesX8028FlcWnMYdJ7enZmZG2MkkSZIAR/UklQQz74e5/6WAZEYUjOCkA/fhTy1qhp1KkiSpkMVJUriWfUrw0uUA3FgwiJTsjlx8aIuQQ0mSJG1rt0b1CgoKWLZsGZs2baJGjRpUreodryTthvyNMHEYkVgeU2MdmJDajxdO7EBqsv+mI0mSSpad/u0kNzeXu+++mwMPPJDMzEwaNmxIq1atqFGjBnvttRdnnnkmH3zwwW6FuPPOO2nYsCEZGRl069aN999//3f3v/3222nRogXlypUjOzubkSNHsmXLlt363JJC9OKlsOpLlgVVuKTgz9x0fDuyq5YPO5UkSdKv7FRxuvXWW2nYsCEPPvggvXv3ZvLkycyePZsvv/ySGTNmMGbMGKLRKIceeiiHHXYYX3311U4HGD9+PKNGjWLMmDF8+OGHtGvXjj59+rBixYrt7v/EE08wevRoxowZw9y5c7n//vsZP348l19++U5/TkklwCcT4KPHiBPhwoLhHLFvGw7bp07YqSRJkrYrEgRBsKOdBg0axJVXXknr1q1/d7+8vDwefPBB0tLSOO2003YqQLdu3ejSpQt33HEHAPF4nOzsbEaMGMHo0aN/tf95553H3LlzmTp1auG2iy66iPfee4+33357h58vJyeHrKws1q9fT2Zm5k5llLSHrf6a4N8HEMnfwD+jx/JSjdOYdG4PMlKTw04mSZLKkF3pBju14vTkk0/usDQBpKenc/bZZ+90acrPz2fWrFn07t37p0BJSfTu3ZsZM2Zs95gePXowa9aswnG+BQsWMGXKFA4//PCd+pySQhbN23pdU/4G3ou35D9Jx3PH4A6WJkmSVKLt8s0hVq5cSY0aNbb7Z3PmzKFNmzY7/bFWrVpFLBajVq1a22yvVasWX3zxxXaPGTx4MKtWrWK//fYjCAKi0Shnn332b47q5eXlkZeXV/h+Tk7OTueTVAReuwa+/5i1QUUuyB/OX09oR5MaFcNOJUmS9Lt2+dZVbdq04YUXXvjV9ptvvpmuXbvukVC/54033uCGG27grrvu4sMPP+SZZ57hhRde4Lrrrtvu/mPHjiUrK6vwlZ2dXeQZJf2GeS/Bu3cCcHHBn+nRsS3HdaofcihJkqQd2+XiNGrUKI477jjOOeccNm/ezJIlSzj44IO56aabeOKJJ3bpY1WvXp3k5GSWL1++zfbly5dTu3bt7R5z1VVXccopp3DGGWfQpk0bjjnmGG644QbGjh1LPB7/1f6XXXYZ69evL3wtXrx4lzJK2kNylhJMPgeAB6KHsbDaAVx39D4hh5IkSdo5u1ycLr30UmbMmMFbb71F27Ztadu2Lenp6XzyySccc8wxu/Sx0tLS6NSp0zY3eojH40ydOpXu3btv95hNmzaRlLRt7OTkrddGbO8+F+np6WRmZm7zklTM4jF4+kwim9fwabwht3ASdwzqSIX03XqUnCRJUrHbrd9amjZtyj777MPTTz8NwMCBA39zhWhHRo0axdChQ+ncuTNdu3bl9ttvZ+PGjQwbNgyAIUOGUK9ePcaOHQtAv379uPXWW+nQoQPdunVj/vz5XHXVVfTr16+wQEkqYabdDN++zYYgg/MKRjD6qLbsXdd/xJAkSYljl4vT9OnTOfnkk6latSqffPIJ06dPZ8SIEUyZMoV77rmHKlWq7NLHGzhwICtXruTqq69m2bJltG/fnpdeeqnwhhGLFi3aZoXpyiuvJBKJcOWVV7JkyRJq1KhBv379+Nvf/rarX4qk4vDNdII3byQCXFlwGq1ad+DkffcKO5UkSdIu2annOP1ceno6I0eO5LrrriM1NRWAr7/+mpNPPpnFixfz3XffFUnQPcXnOEnFaNMagrt7EsldysTYAdxWYSRTLtifrHKpYSeTJEnapW6wyytOr7zyCgceeOA225o0acL06dNd9ZH0kyCAyecQyV3K1/E6XBsbxkODO1iaJElSQtrlFadE54qTVEzevRteGk1ekMox+ddw1GGHcfaBTcJOJUmSVGhXusFO3VVv3LhxO/3JFy9ezPTp03d6f0ml0NKPCF65CoDroydRvVkXztq/ccihJEmSdt9OFae7776bVq1acdNNNzF37txf/fn69euZMmUKgwcPpmPHjqxevXqPB5WUIPJyYeJpROIFvBzrzMvljuTWAe1ISoqEnUySJGm37dQ1Tm+++SbPPfcc//rXv7jsssuoUKECtWrVIiMjg7Vr17Js2TKqV6/Oqaeeyqefflp4RzxJZUwQwPOjYM0ClgTV+Ev0LO4a2oHqFdPDTiZJkvSH7PTNIY466iiOOuooVq1axdtvv823337L5s2bqV69Oh06dKBDhw6/ejCtpDLm4ydhzlNEgyTOzz+PIb3a06Np9bBTSZIk/WG7fFe9iy66iNNPP53+/fsXQRxJCWvVVwQvXEQEuC16PMl7def8g5uFnUqSJGmP2OUlovXr19O7d2+aNWvGDTfcwNKlS4sil6REUrAFJgwjUrCJ6bHWjEs7ln8Oak9KsqvQkiSpdNjl32omT57MkiVLOOeccxg/fjx77bUXffv2ZeLEiRQUFBRFRkkl3StXwvI5rAoyGVlwLjcN6EidrHJhp5IkSdpjduufg2vUqMGoUaP4+OOPee+992jatCmnnHIKdevWZeTIkXz11Vd7Oqekkmruf+GD+wC4uOBs+u3XkYNbeYMYSZJUuvyhOZrvv/+eV199lVdffZXk5GQOP/xw5syZw957781tt922pzJKKqnWLSJ4djgA/44ewZq6B/KXw1qGHEqSJGnP2+XiVFBQwNNPP82RRx7JXnvtxYQJE7jwwgtZunQpDz/8MK+99hpPPfUU1157bVHklVRSxKLw9BlEtqxndrwJdyefxL8GdSAtxeuaJElS6bPLd9WrU6cO8XicQYMG8f7779O+fftf7dOrVy8qV668B+JJKrHeGAuL3yMnKMeIgvO47sQO7FWtQtipJEmSisQuF6fbbruNE044gYyMjN/cp3LlyixcuPAPBZNUgi14g+CtW4gAlxecwX5dOtOvXd2wU0mSJBWZXS5Op5xySlHkkJQoNqwkeOYsIgQ8Ee3FlzUO4dkjW4edSpIkqUjtcnGSVIbF4zD5bCIblvNlvB43RU5lwuCOlEtLDjuZJElSkfIqbkk7b8YdMP81tgSpnFdwPpcd1ZFmtSqFnUqSJKnIWZwk7ZzvZhJMvQaAa6JDaNm2GwM6Z4ccSpIkqXg4qidpxzavI5g4jEg8yvOxbryTdSTPH7MPkUgk7GSSJEnFwuIk6fcFAfz3AiLrFrE4XoOr42fy8OBOVMpIDTuZJElSsXFUT9Lv+/Bh+HwyBUEy5xecx3l9O9OmflbYqSRJkoqVxUnSb1sxl+DFvwBwc3QA1Vrux7CeDcPNJEmSFAJH9SRtX/4mggnDiES38GasLf+tcBwvHN/W65okSVKZZHGStH0vX0Zk5VxWBJW5JHYudw7uRJUKaWGnkiRJCoWjepJ+7dNnYNZDxIMIIwvOYUjvznRpWDXsVJIkSaGxOEna1tpvCP57PgB3xY6Cxn/inD81DTmUJElSuBzVk/STaD5MPI1IXi4z4815NH0Q/x3YnuQkr2uSJEllmytOkn7yv+tgySzWB+W5IH84/xjYmZqVMsJOJUmSFDqLk6StvnoN3vk/AC4tOIuj/rQvBzSvEXIoSZKkksFRPUmQu4xg0p+JAI9ED2Fl/UO545DmYaeSJEkqMSxOUlkXj8EzZxLZtIq58Qb8X8pQJg/qQGqyC9KSJEk/8jcjqax7+zZYOI1NQTrnFYzgbyd0oX6V8mGnkiRJKlEsTlJZtuhdgtdvAODq6Knst28P+rSuHXIoSZKkksdRPams2rSG4OnTiQQxJsV68nmNI3nm8FZhp5IkSSqRLE5SWRQE8NwIIuu/Y2G8Fn+LnMlTJ3UkIzU57GSSJEklkqN6Uln0wX/gi+fJD5IZUTCCK47pQuMaFcNOJUmSVGJZnKSy5vtPCF6+HIAbo4Np2fEAjulQP+RQkiRJJZujelJZkreBYOJpRGL5vBbrwJtVjuO/R7cOO5UkSVKJZ3GSypIXLyWy+iuWBVW4IjiHh07qRPk0vw1IkiTtiKN6Ulnx8XiY/TixIMIF+ecx4sh9aVUnM+xUkiRJCcHiJJUFq78meGEkAP+KHUO1fXpxUrcGIYeSJElKHM7oSKVdNI9g4jAi+Rt5L96SSRUH89yxbYlEImEnkyRJShgWJ6m0e+2vRL7/mDVBRS6KnscdJ3Uhq1xq2KkkSZISiqN6Umk270V49y4ALi44myGH9aB9duVwM0mSJCUgi5NUWq1fQjD5HADuj/Yl3qwPZ+zXOORQkiRJiclRPak0ikXh6TOIbF7LnHhDHiw3lGdPaEdSktc1SZIk7Q5XnKTSaNo/YNE7bAgyuCA6gn+c2JVqFdPDTiVJkpSwLE5SabPwLYJpNwFwRcFp9Ot1AN2bVAs5lCRJUmKzOEmlycbVBM+cSSSIMyF6AMv2OorzD24WdipJkqSE5zVOUmkRBDD5HCK53/N1vA63p53J0yd2INnrmiRJkv4wV5yk0uLdu+Grl8kLUhlRMILrB+xL7ayMsFNJkiSVChYnqTRY+hHBq1cDcH30JHru14teLWuGHEqSJKn0cFRPSnRbcggmDCMSL+ClWBc+qXMCE/q0DDuVJElSqWJxkhJZEMALo4isXch3QXWuSzqHJwd1JC3FxWRJkqQ9yd+upEQ2+3GYM4FokMQF+cO5/LgeNKhWPuxUkiRJpY7FSUpUK+cRvHAxALdGj6dF10M4om2dkENJkiSVTo7qSYmoYDPBxGFEopt5O9aaN6oP5pkj9w47lSRJUqllcZIS0StXEln+GauCTC5nBA+c1JmM1OSwU0mSJJVajupJiebz5+CD/wBwUcE5nHf0fjStWSnkUJIkSaWbxUlKJOsWEX/2PADuiR5JlbZ9OaFT/ZBDSZIklX6O6kmJIggInh1OUt56Zseb8HTWqUw6pg2RSCTsZJIkSaVeiVhxuvPOO2nYsCEZGRl069aN999//3f3X7duHcOHD6dOnTqkp6fTvHlzpkyZUkxppZDMepDIwmlsDtK4JHYetw3uSsV0/+1DkiSpOIT+W9f48eMZNWoU99xzD926deP222+nT58+zJs3j5o1a/5q//z8fA455BBq1qzJxIkTqVevHt9++y2VK1cu/vBScVm3iPjLV5IE/CM6kEF9e7FPvaywU0mSJJUZoRenW2+9lTPPPJNhw4YBcM899/DCCy/wwAMPMHr06F/t/8ADD7BmzRreeecdUlNTAWjYsGFxRpaKVxAQPHc+SQUbmRlvzufZJ3Jlj4Zhp5IkSSpTQh3Vy8/PZ9asWfTu3btwW1JSEr1792bGjBnbPea5556je/fuDB8+nFq1arHPPvtwww03EIvFtrt/Xl4eOTk527ykhPLhI0QWvM6WIJWrgnO46YSOJCV5XZMkSVJxCrU4rVq1ilgsRq1atbbZXqtWLZYtW7bdYxYsWMDEiROJxWJMmTKFq666iltuuYXrr79+u/uPHTuWrKyswld2dvYe/zqkIrP+O+IvXwHALdETOLHvQTSoVj7kUJIkSWVPibg5xK6Ix+PUrFmTe++9l06dOjFw4ECuuOIK7rnnnu3uf9lll7F+/frC1+LFi4s5sbSbgoDguQtIys/lw3hT5mSfxCn77hV2KkmSpDIp1GucqlevTnJyMsuXL99m+/Lly6ldu/Z2j6lTpw6pqakkJycXbmvVqhXLli0jPz+ftLS0bfZPT08nPT19z4eXitrsx4l8/Rp5P4zo3e2IniRJUmhCXXFKS0ujU6dOTJ06tXBbPB5n6tSpdO/efbvH9OzZk/nz5xOPxwu3ffnll9SpU+dXpUlKWDlLib94GQC3RY9jQN/ejuhJkiSFKPRRvVGjRnHffffx8MMPM3fuXM455xw2btxYeJe9IUOGcNlllxXuf84557BmzRouuOACvvzyS1544QVuuOEGhg8fHtaXIO1ZQUDw3wtJys9hdrwxH2ef4oieJElSyEK/HfnAgQNZuXIlV199NcuWLaN9+/a89NJLhTeMWLRoEUlJP/W77OxsXn75ZUaOHEnbtm2pV68eF1xwAX/5y1/C+hKkPeuT8US+epm8IIWrgnO50xE9SZKk0EWCIAjCDlGccnJyyMrKYv369WRmZoYdR9pW7jLid3QlKW89NxUMoNYRVzDUZzZJkiQViV3pBqGvOEn6wY8jennrmRNvyOzsITzmiJ4kSVKJYHGSSoo5E4l8+SL5QTJXBufyrxM6OaInSZJUQoR+cwhJwIYVxKZcAsAd0WM4tm8f76InSZJUgrjiJIUtCAieH0XylrV8Ft+LmdmnOqInSZJUwlicpLB9NonIF/+l4IcRvX86oidJklTiOKonhWnDSmLPXwTAXbGj6d/3MEf0JEmSSiBXnKQQBVMuJnnLGubGs3mv/jBH9CRJkkooi5MUls8mE/l8MtEgiSuDc7nthM6O6EmSJJVQjupJYdi4mtjzowC4O3YUR/U93BE9SZKkEsziJIUgePFSkjevZl68Pu/WP41THNGTJEkq0RzVk4rb3OeJfDqRWBDhyuAcbjmhiyN6kiRJJZwrTlJx2rSG2H8vBODe2JEc2fdIR/QkSZISgMVJKkbBi38hedNK5sfrMr3+mY7oSZIkJQhH9aTiMu9FInOeKhzRu8kRPUmSpIThipNUHDavJfrcBQD8J3Y4ffse5YieJElSArE4ScUgeOlyUjYu5+t4Hd6qf5YjepIkSQnGUT2pqH35CpGPnyD+w4je30/o6oieJElSgnHFSSpKW9YTffZ8AB6IHcZhfY92RE+SJCkBWZykIhS8fAUpG79nYbwWb9b/syN6kiRJCcpRPamozH+NyEePEg8iXBWcww0ndHNET5IkKUG54iQVhS05RCePAODh2KEc0vcYR/QkSZISmMVJKgLBK1eRsmEp38Zr8nq9cxzRkyRJSnAWJ2lP+/p1Ih8+BMBVwdlcP8ARPUmSpERncZL2pLxcopPPA+CR6CEc3Pc4R/QkSZJKAYuTtAcFr/6VlNzvWByvwWv1znVET5IkqZSwOEl7ysJpRGb+B4Crgz9z/YB9HdGTJEkqJSxO0p6Qt4HopOEAPB49mD/1PcERPUmSpFLE4iTtAcHUa0jJWcSSoBqvOqInSZJU6licpD/qm+lE3r8XgKvjf+baAT0c0ZMkSSplLE7SH5G/iYJJ5wLwZLQXB/Qd6IieJElSKWRxkv6AYOq1pK7/hqVBVV6ud54jepIkSaWUxUnaXYvehffuAeCv8bMc0ZMkSSrFLE7S7ijYTMEz5xIhYEL0AHr2HeSIniRJUilmcZJ2Q/C/v5G67muWBVV4sd4IR/QkSZJKOYuTtKsWf0Aw404AromfyZgBPR3RkyRJKuUsTtKuKNhCwTNnk0Scp2P70e2wwexVrULYqSRJklTELE7SLgheH0vq2vmsCCrzQt0LGNK9YdiRJEmSVAwsTtLO+m4WwTv/B8A18TMc0ZMkSSpDLE7SzojmFY7oTY71oMthJzuiJ0mSVIZYnKSdELzxd1LXfMnKIJP/1r3QET1JkqQyxuIk7cjSjwim3w7AdfEzuHrAfo7oSZIklTEWJ+n3RPPJf/ockoIYz8f2peNhQxzRkyRJKoMsTtLvCKb9g7TVc1kdVGJyHUf0JEmSyiqLk/Rbvv+E4K1bAbg+OJ2rBh7giJ4kSVIZZXGStidWQP7TZ5MURJkS60q7Q4c6oidJklSGWZyk7YhPu4W0VZ+xJqjI5DojGdKjUdiRJEmSFCKLk/RLyz4lmPYPAP4WnMYVAw90RE+SJKmMszhJP/fDiF5yEOXlWGfaHDrMET1JkiRZnKSfi799O2kr57AuqMDTdUY5oidJkiTA4iT9ZPnnBG/cCMANwTCuGPgnR/QkSZIEWJykrWLRwhG912Id2PvQ0x3RkyRJUiGLkwTE3/kXaSs+Zn1Qnol1LnZET5IkSduwOEkr5xH8728A3BgM5bKBvRzRkyRJ0jYsTirb4jHyJp5NclDA67F2tDj0LEf0JEmS9CsWJ5Vp8XfuJH35h+QE5RjviJ4kSZJ+g8VJZdeqr4j/73oAbgqGcNnAgx3RkyRJ0nZZnFQ2xWPkPX0OKfE8psXa0PTQsx3RkyRJ0m+yOKlMir97N+nff0BuUI4n61ziiJ4kSZJ+l8VJZc/qr4m/dh0A/whOZvTA3o7oSZIk6XdZnFS2xONsefocUuJbeDvWmsaHnuuIniRJknaoRBSnO++8k4YNG5KRkUG3bt14//33d+q4cePGEYlE6N+/f9EGVKkRf/9eMpa+x8YgnSdrO6InSZKknRN6cRo/fjyjRo1izJgxfPjhh7Rr144+ffqwYsWK3z3um2++4eKLL2b//fcvpqRKeGsWEH91DAC3BCdx6YmHOqInSZKknRJ6cbr11ls588wzGTZsGHvvvTf33HMP5cuX54EHHvjNY2KxGCeddBLXXHMNjRs3Lsa0SljxOFueHk5KbAszYnvT4NDzHNGTJEnSTgu1OOXn5zNr1ix69+5duC0pKYnevXszY8aM3zzu2muvpWbNmpx++uk7/Bx5eXnk5ORs81LZE//gfjKWvMOmIJ3Ha1/CkB4WbkmSJO28UIvTqlWriMVi1KpVa5vttWrVYtmyZds95u233+b+++/nvvvu26nPMXbsWLKysgpf2dnZfzi3Eszab4m9chUAtwaDuOTEPo7oSZIkaZeEPqq3K3JzcznllFO47777qF69+k4dc9lll7F+/frC1+LFi4s4pUqUIGDLM8NJjW3mvXhL6h96viN6kiRJ2mUpYX7y6tWrk5yczPLly7fZvnz5cmrXrv2r/b/++mu++eYb+vXrV7gtHo8DkJKSwrx582jSpMk2x6Snp5Oenl4E6ZUI4jMfImPxW2wO0nis1qX80xE9SZIk7YZQV5zS0tLo1KkTU6dOLdwWj8eZOnUq3bt3/9X+LVu2ZM6cOcyePbvwddRRR9GrVy9mz57tGJ62tW4RsZcuB+D24EQuPvEwR/QkSZK0W0JdcQIYNWoUQ4cOpXPnznTt2pXbb7+djRs3MmzYMACGDBlCvXr1GDt2LBkZGeyzzz7bHF+5cmWAX21XGRcEbHl6OBmxTcyMN6fuoRc4oidJkqTdFnpxGjhwICtXruTqq69m2bJltG/fnpdeeqnwhhGLFi0iKSmhLsVSCRD/8BEyFk9jS5DKo7Uu4bYeTXZ8kCRJkvQbIkEQBGGHKE45OTlkZWWxfv16MjMzw46jorB+Cfn/6kpadAM3xU9m4AU3udokSZKkX9mVbuBSjkqXIGDzM+eRFt3Ah/Gm1Dp0pKVJkiRJf5jFSaVK/KPHKfft/8gLUnm05qWc4oieJEmS9gCLk0qPnKVEp4wG4I7gBC4cdKR30ZMkSdIeYXFS6RAEbH7mfNKiucyON6b6IaMc0ZMkSdIeY3FSqRD/eDzlvnmVvCCFR2peyik9m4YdSZIkSaWIxUmJL3cZBc9fAsBdwfFcMOgoR/QkSZK0R1mclNiCgE2Tzic9msOceEOqHnKRI3qSJEna4yxOSmjxORMpv+Bl8oNkHq55Kaf0bBZ2JEmSJJVCFiclrg0rKPjvRQDcExzHiEH9HdGTJElSkbA4KTEFAZsmXUB6wXo+i+9F1iGXOKInSZKkImNxUkKKfzqJ8l9PoSBI5iFH9CRJklTELE5KPBtXkf/cKADuDfpz3qBjHNGTJElSkbI4KeFsmjySjIK1zI1nU+mQ0Y7oSZIkqchZnJRQ4p9NpvxXzxENknio5qWc7IieJEmSioHFSYlj42rynh0JwH+Cozl30HGO6EmSJKlYWJyUMDY+dxHl8tcwL16f8odc5oieJEmSio3FSQkh/vl/qTBvErEgwkM1LuHkns3DjiRJkqQyxOKkkm/TGvImXwDA/cFRnD34BEf0JEmSVKwsTirxNj53CeXyV/NVvB7lel/uiJ4kSZKKncVJJVr8ixep8MXEH0b0Luak/VqEHUmSJEllkMVJJdfmtWyZNAKAh4IjOWvwQEf0JEmSFAqLk0qsjc/9hfJ5K/k6Xoe03lc4oidJkqTQWJxUIsXnvUKFueOJBxEerHEJJ+3XMuxIkiRJKsMsTip58nLZPOk8AB4JDufMwSc6oidJkqRQWZxU4mx48a9U2LKcb+M1Se59pSN6kiRJCp3FSSVK8N1Mys++H4CHq17ASfu1CjmRJEmSZHFSSRIrIGfCcJIImBzfj0GDhjqiJ0mSpBLB4qQSY/O0f5G1/gvWBhVZtu/VNKtVKexIkiRJEmBxUkmx9huSp90IwH3lhjHs0M4hB5IkSZJ+YnFS+IKAdRPOJy3IY0Zsb/40YCTpKclhp5IkSZIKWZwUuvyPJ1B56ZvkBam8s/eVdG1cLexIkiRJ0jYsTgrXpjUUvPAXAB5MPo4z+h8aciBJkiTp1yxOCtX6/15OhYI1fBWvR4OjLierXGrYkSRJkqRfsTgpNPGF08ma+yQAT9e7mL7tGoScSJIkSdo+i5PCEc0jd+JwACYEBzNk4CAiEZ/ZJEmSpJLJ4qRQ5E69mayNC1kZZFHQawx1K5cLO5IkSZL0myxOKn4rvyRjxm0APJR5NgMPaBtyIEmSJOn3WZxUvIKANU8NJ5UC3oi358hBw0lOckRPkiRJJZvFScVq8/sPU3Xl+2wK0vmi4xha1c0KO5IkSZK0QxYnFZ8NKwleuRKAh9IHceoRB4YcSJIkSdo5FicVm9XPXEz5WC6fxfei3fGXkZGaHHYkSZIkaadYnFQsCua9SrUFk4kFEV5tegU9m9cOO5IkSZK00yxOKnr5m9g06QIAxicdztDjjgk5kCRJkrRrLE4qcuteup6sLUtYGlQls+9fqVIhLexIkiRJ0i6xOKlIBcvmUOnDuwEYX+MCjujSLOREkiRJ0q6zOKnoxGOsGXcOycR5OejG8YPPIhLxmU2SJElKPBYnFZnct/9NtXVzyAnKsWq/a8muWj7sSJIkSdJusTipaOQsJeWN6wB4rMKpDDyoa8iBJEmSpN1ncVKRWPnU+ZSLb+LDeFP2H/QXUpL9qyZJkqTE5W+z2uO2zHmWGt+9SkGQzMw2Y2iTXSXsSJIkSdIfYnHSnrUlh/znLgLgyZT+nHz04SEHkiRJkv44i5P2qFXPXUVmwUq+idei4bF/pXxaStiRJEmSpD/M4qQ9JrroA6p+/jAAL+x1CQe0bhByIkmSJGnPsDhpz4gVsO6pc0ki4Hn2Z+DAIWEnkiRJkvYYi5P2iLX/+yfVN3zJ2qAisUP+RvWK6WFHkiRJkvYYi5P+sGDNQsq/cxMA46r8maN6tA05kSRJkrRnWZz0xwQBK8YNJz3IY0a8NYedNIpIJBJ2KkmSJGmPsjjpD9kwazy1VkwnL0jl627X0ahGxbAjSZIkSXucxUm7b9MaghdHAzAuYwADD+sVciBJkiSpaFictNuWPf0XKsXW8lW8Hu1OHENqsn+dJEmSVDqViN9077zzTho2bEhGRgbdunXj/fff/81977vvPvbff3+qVKlClSpV6N279+/ur6KRN/8tan/9FABvtbyS9o1qhZxIkiRJKjqhF6fx48czatQoxowZw4cffki7du3o06cPK1as2O7+b7zxBoMGDeL1119nxowZZGdnc+ihh7JkyZJiTl6GRfPYMHE4AJOTDmHAcQNCDiRJkiQVrUgQBEGYAbp160aXLl244447AIjH42RnZzNixAhGjx69w+NjsRhVqlThjjvuYMiQHT90NScnh6ysLNavX09mZuYfzl8WrfjvX6k56zZWBll8esxr9GrfPOxIkiRJ0i7blW4Q6opTfn4+s2bNonfv3oXbkpKS6N27NzNmzNipj7Fp0yYKCgqoWrXqdv88Ly+PnJycbV7afbEV86gy618APFfnfEuTJEmSyoRQi9OqVauIxWLUqrXt9TG1atVi2bJlO/Ux/vKXv1C3bt1tytfPjR07lqysrMJXdnb2H85dZsXjrHjiHFKJ8hYd6DdoeNiJJEmSpGIR+jVOf8SNN97IuHHjmDRpEhkZGdvd57LLLmP9+vWFr8WLFxdzytJjzfQHqLNuFpuCdFYfeAM1s8qFHUmSJEkqFilhfvLq1auTnJzM8uXLt9m+fPlyateu/bvH3nzzzdx444289tprtG3b9jf3S09PJz09fY/kLcuCDStIe/2vAEzIPIVTDuwebiBJkiSpGIW64pSWlkanTp2YOnVq4bZ4PM7UqVPp3v23fzG/6aabuO6663jppZfo3LlzcUQt85aOH0nFeC6fBQ3pedKVJCVFwo4kSZIkFZtQV5wARo0axdChQ+ncuTNdu3bl9ttvZ+PGjQwbNgyAIUOGUK9ePcaOHQvA3//+d66++mqeeOIJGjZsWHgtVMWKFalYsWJoX0dptvGzl6m3+HliQYSP213D4NpVwo4kSZIkFavQi9PAgQNZuXIlV199NcuWLaN9+/a89NJLhTeMWLRoEUlJPy2M3X333eTn53P88cdv83HGjBnDX//61+KMXjbkb2LL5AuoAExOO5LjjuoXdiJJkiSp2IX+HKfi5nOcds3SCZdQ97N7WRJUY9nJb9CpWYOwI0mSJEl7RMI8x0klW953H1Prs/8AMLXRJZYmSZIklVkWJ21fPMaaceeQTJypkX05euAZYSeSJEmSQmNx0nat+N+d1NnwGTlBOej7d7LKpYYdSZIkSQqNxUm/El/3HRWn3wDAc9XP5KAu7UJOJEmSJIXL4qRf+e6JEZQPNvNR0JyDTh5NJOIzmyRJklS2WZy0jbWznqHBiv9RECTzbY8bqFulQtiRJEmSpNBZnPSTLTkw5RIAni1/HP0O6R1yIEmSJKlksDip0LcTL6dKbBXfBrXYZ/D1JCc5oidJkiSBxUk/2LDgPbLnPwbAu3tfScvsWiEnkiRJkkoOi5MgVsCGp84liYCXU/7E0ceeFHYiSZIkqUSxOInvXvwHtbfMZ01QkSr9byIjNTnsSJIkSVKJYnEq4/JXLqT6zNsAeLXeCLru0yLkRJIkSVLJY3Eqy4KA7584hwzy+YB9OHTwyLATSZIkSSWSxakMW/7O4+y1dgZ5QSrre99ElYrpYUeSJEmSSiSLUxkV37iGjKmXA/B85ZM4uGePkBNJkiRJJZfFqYz6ZtxFZMXXMz+oT9eTryES8ZlNkiRJ0m+xOJVBa+e+TuPFzwDweadrya5ROdxAkiRJUglncSpronnkPTMCgBfTD+PwI44JOZAkSZJU8lmcypgFk6+jdsFiVgZZ7DXwJlKS/SsgSZIk7Yi/NZchm5Z+Tv1P7wbgraYXs3fjvUJOJEmSJCUGi1NZEY+z8olzSCPKO0mdOGzAOWEnkiRJkhKGxamMWPy/e9lrw2w2BekkHXkL5dNTw44kSZIkJQyLUxlQkLOcytOvA+CVmqexb8cOISeSJEmSEovFqQz45vELqBRsYC6N2O+Uq8KOI0mSJCUci1Mpt/zD52m2/EViQYQl+42lemaFsCNJkiRJCcfiVIoF+RuJvHARAC9X7M/BBx8WciJJkiQpMVmcSrEvn7qSmrFlLA2q0fqkm4hEImFHkiRJkhKSxamUWrdgFk3mPwTAR/tcyV51a4YbSJIkSUpgFqfSKB5j/VPDSSHOW6k9OPTYU8NOJEmSJCU0i1MpNP+F29lry1xygnJUPu42UpP9zyxJkiT9Ef5GXcpsXrWIurNuAmBag+G0adky5ESSJElS4rM4lTKLHj+P8mxhTqQFfzrpL2HHkSRJkkoFi1Mp8u30p2ix9k0KgmQ2HHoLFTPSwo4kSZIklQoWp1Iitnk9FaaOBuB/VQfSvfv+ISeSJEmSSg+LUynxxeOXUj2+mkXUosPJN4QdR5IkSSpVLE6lwIq5b9Nq8XgAvupyPTWrVQk5kSRJklS6WJwSXBDNZ8szI0iKBLyZcTC9+p4QdiRJkiSp1LE4Jbi5k26kQcEC1gaVyB50K0lJkbAjSZIkSaWOxSmB5Sz9ksaf/QuAD5qPpPFeDcMNJEmSJJVSFqdEFQQse+JcMsjno+Q2HDjggrATSZIkSaWWxSlBfTX1QZpv+IC8IJXko/9JempK2JEkSZKkUsvilIC25Kyi+vS/AjCtzlDatu0UbiBJkiSplLM4JaCvHhtJlWA9C6hP15OvDTuOJEmSVOpZnBLMog9foc2K5wBYceDfyapYIeREkiRJUulncUog8fwtJL0wEoA3Kx1Jtz8dEXIiSZIkqWywOCWQOePHUD/2HSuDyrQ4+RYiEZ/ZJEmSJBUHi1OCWLHwE1rN/w8An7W7nNq1aoecSJIkSSo7LE6JIB5n3fjhpEWizEzrwv5Hnxl2IkmSJKlMsTglgDkv3EnzLZ+wKUinyvH/JDnZ/2ySJElScfI38BIud/US9po1FoD3Gp5Nk+atQ04kSZIklT0WpxJuwaPnk8lGvkxqQvfBV4QdR5IkSSqTLE4l2JdvT6LduteIBRE2H3YLGenpYUeSJEmSyiSLUwmVtymHSlMvBWB6teNp17VXyIkkSZKkssviVEJ9+sTl1AlWsIzqtB1yU9hxJEmSpDLN4lQCLfr8XdotfhyAb7pdQ+XKVUNOJEmSJJVtFqcSJh6Nkj9pBCmROB+U359uh50UdiRJkiSpzLM4lTAfPvMPmhZ8SW5Qjron/h+RSCTsSJIkSVKZZ3EqQVYt+ZpWn98OwCctL6Reg8bhBpIkSZIEWJxKlCVPjKACW5ib0pJuJ1wcdhxJkiRJP7A4lRCfvPoo7TZOpyBIJuXof5GSkhJ2JEmSJEk/KBHF6c4776Rhw4ZkZGTQrVs33n///d/df8KECbRs2ZKMjAzatGnDlClTiilp0diQs4ba068G4P26J9OsTdeQE0mSJEn6udCL0/jx4xk1ahRjxozhww8/pF27dvTp04cVK1Zsd/933nmHQYMGcfrpp/PRRx/Rv39/+vfvz6efflrMyfeczx+9hJqsYXGkDh1O/lvYcSRJkiT9QiQIgiDMAN26daNLly7ccccdAMTjcbKzsxkxYgSjR4/+1f4DBw5k48aNPP/884Xb9t13X9q3b88999yzw8+Xk5NDVlYW69evJzMzc899Ibvpy1mv0/S5Y0iKBHx80CO0O+DosCNJkiRJZcKudINQV5zy8/OZNWsWvXv3LtyWlJRE7969mTFjxnaPmTFjxjb7A/Tp0+c39y/JCvLzSH3hQpIiAR9kHmppkiRJkkqoUO9AsGrVKmKxGLVq1dpme61atfjiiy+2e8yyZcu2u/+yZcu2u39eXh55eXmF7+fk5PzB1HvOzHHX0T3+DWupRJOTbw87jiRJkqTfEPo1TkVt7NixZGVlFb6ys7PDjlQoq1lPFkXqMb/9aKrWrBd2HEmSJEm/IdQVp+rVq5OcnMzy5cu32b58+XJq16693WNq1669S/tfdtlljBo1qvD9nJycElOe9u7el7wOB5KdlhF2FEmSJEm/I9QVp7S0NDp16sTUqVMLt8XjcaZOnUr37t23e0z37t232R/g1Vdf/c3909PTyczM3OZVkqRnlCeSVOoX/iRJkqSEFvpTVkeNGsXQoUPp3LkzXbt25fbbb2fjxo0MGzYMgCFDhlCvXj3Gjh0LwAUXXMCBBx7ILbfcwhFHHMG4ceOYOXMm9957b5hfhiRJkqRSLPTiNHDgQFauXMnVV1/NsmXLaN++PS+99FLhDSAWLVpE0s9WZHr06METTzzBlVdeyeWXX06zZs2YPHky++yzT1hfgiRJkqRSLvTnOBW3kvYcJ0mSJEnhSJjnOEmSJElSIrA4SZIkSdIOWJwkSZIkaQcsTpIkSZK0AxYnSZIkSdoBi5MkSZIk7YDFSZIkSZJ2wOIkSZIkSTtgcZIkSZKkHbA4SZIkSdIOWJwkSZIkaQcsTpIkSZK0AxYnSZIkSdoBi5MkSZIk7YDFSZIkSZJ2wOIkSZIkSTtgcZIkSZKkHbA4SZIkSdIOWJwkSZIkaQcsTpIkSZK0AxYnSZIkSdqBlLADFLcgCADIyckJOYkkSZKkMP3YCX7sCL+nzBWn3NxcALKzs0NOIkmSJKkkyM3NJSsr63f3iQQ7U69KkXg8ztKlS6lUqRKRSCTsOOTk5JCdnc3ixYvJzMwMO06p5DkuHp7n4uF5Lnqe4+LheS4enufi4XkuekV1joMgIDc3l7p165KU9PtXMZW5FaekpCTq168fdoxfyczM9P9oRcxzXDw8z8XD81z0PMfFw/NcPDzPxcPzXPSK4hzvaKXpR94cQpIkSZJ2wOIkSZIkSTtgcQpZeno6Y8aMIT09PewopZbnuHh4nouH57noeY6Lh+e5eHiei4fnueiVhHNc5m4OIUmSJEm7yhUnSZIkSdoBi5MkSZIk7YDFSZIkSZJ2wOIkSZIkSTtgcSoGd955Jw0bNiQjI4Nu3brx/vvv/+7+EyZMoGXLlmRkZNCmTRumTJlSTEkT166c4/vuu4/999+fKlWqUKVKFXr37r3D/ybaalf/Lv9o3LhxRCIR+vfvX7QBS4ldPc/r1q1j+PDh1KlTh/T0dJo3b+73jR3Y1XN8++2306JFC8qVK0d2djYjR45ky5YtxZQ2MU2bNo1+/fpRt25dIpEIkydP3uExb7zxBh07diQ9PZ2mTZvy0EMPFXnORLar5/iZZ57hkEMOoUaNGmRmZtK9e3defvnl4gmbwHbn7/KPpk+fTkpKCu3bty+yfKXF7pznvLw8rrjiCvbaay/S09Np2LAhDzzwQJFltDgVsfHjxzNq1CjGjBnDhx9+SLt27ejTpw8rVqzY7v7vvPMOgwYN4vTTT+ejjz6if//+9O/fn08//bSYkyeOXT3Hb7zxBoMGDeL1119nxowZZGdnc+ihh7JkyZJiTp5YdvU8/+ibb77h4osvZv/99y+mpIltV89zfn4+hxxyCN988w0TJ05k3rx53HfffdSrV6+YkyeOXT3HTzzxBKNHj2bMmDHMnTuX+++/n/Hjx3P55ZcXc/LEsnHjRtq1a8edd965U/svXLiQI444gl69ejF79mwuvPBCzjjjDH+x/x27eo6nTZvGIYccwpQpU5g1axa9evWiX79+fPTRR0WcNLHt6nn+0bp16xgyZAgHH3xwESUrXXbnPA8YMICpU6dy//33M2/ePJ588klatGhRdCEDFamuXbsGw4cPL3w/FosFdevWDcaOHbvd/QcMGBAcccQR22zr1q1b8Oc//7lIcyayXT3HvxSNRoNKlSoFDz/8cFFFLBV25zxHo9GgR48ewX/+859g6NChwdFHH10MSRPbrp7nu+++O2jcuHGQn59fXBET3q6e4+HDhwcHHXTQNttGjRoV9OzZs0hzliZAMGnSpN/d59JLLw1at269zbaBAwcGffr0KcJkpcfOnOPt2XvvvYNrrrlmzwcqpXblPA8cODC48sorgzFjxgTt2rUr0lylzc6c5xdffDHIysoKVq9eXTyhgiBwxakI5efnM2vWLHr37l24LSkpid69ezNjxoztHjNjxoxt9gfo06fPb+5f1u3OOf6lTZs2UVBQQNWqVYsqZsLb3fN87bXXUrNmTU4//fTiiJnwduc8P/fcc3Tv3p3hw4dTq1Yt9tlnH2644QZisVhxxU4ou3OOe/TowaxZswrH+RYsWMCUKVM4/PDDiyVzWeHPv+IXj8fJzc31518RePDBB1mwYAFjxowJO0qp9dxzz9G5c2duuukm6tWrR/Pmzbn44ovZvHlzkX3OlCL7yGLVqlXEYjFq1aq1zfZatWrxxRdfbPeYZcuWbXf/ZcuWFVnORLY75/iX/vKXv1C3bt1f/cDWT3bnPL/99tvcf//9zJ49uxgSlg67c54XLFjA//73P0466SSmTJnC/PnzOffccykoKPAH9nbszjkePHgwq1atYr/99iMIAqLRKGeffbajenvYb/38y8nJYfPmzZQrVy6kZKXXzTffzIYNGxgwYEDYUUqVr776itGjR/PWW2+RkuKv2kVlwYIFvP3222RkZDBp0iRWrVrFueeey+rVq3nwwQeL5HO64qQy7cYbb2TcuHFMmjSJjIyMsOOUGrm5uZxyyincd999VK9ePew4pVo8HqdmzZrce++9dOrUiYEDB3LFFVdwzz33hB2t1HjjjTe44YYbuOuuu/jwww955plneOGFF7juuuvCjibttieeeIJrrrmGp556ipo1a4Ydp9SIxWIMHjyYa665hubNm4cdp1SLx+NEIhEef/xxunbtyuGHH86tt97Kww8/XGSrTtbgIlS9enWSk5NZvnz5NtuXL19O7dq1t3tM7dq1d2n/sm53zvGPbr75Zm688UZee+012rZtW5QxE96unuevv/6ab775hn79+hVui8fjAKSkpDBv3jyaNGlStKET0O78fa5Tpw6pqakkJycXbmvVqhXLli0jPz+ftLS0Is2caHbnHF911VWccsopnHHGGQC0adOGjRs3ctZZZ3HFFVeQlOS/Qe4Jv/XzLzMz09WmPWzcuHGcccYZTJgwwWmLPSw3N5eZM2fy0Ucfcd555wFbf/4FQUBKSgqvvPIKBx10UMgpS4c6depQr149srKyCre1atWKIAj47rvvaNas2R7/nH63L0JpaWl06tSJqVOnFm6Lx+NMnTqV7t27b/eY7t27b7M/wKuvvvqb+5d1u3OOAW666Sauu+46XnrpJTp37lwcURParp7nli1bMmfOHGbPnl34OuqoowrvlpWdnV2c8RPG7vx97tmzJ/Pnzy8spgBffvklderUsTRtx+6c402bNv2qHP1YVIMgKLqwZYw//4rHk08+ybBhw3jyySc54ogjwo5T6mRmZv7q59/ZZ59NixYtmD17Nt26dQs7YqnRs2dPli5dyoYNGwq3ffnllyQlJVG/fv2i+aTFdhuKMmrcuHFBenp68NBDDwWff/55cNZZZwWVK1cOli1bFgRBEJxyyinB6NGjC/efPn16kJKSEtx8883B3LlzgzFjxgSpqanBnDlzwvoSSrxdPcc33nhjkJaWFkycODH4/vvvC1+5ublhfQkJYVfP8y95V72ds6vnedGiRUGlSpWC8847L5g3b17w/PPPBzVr1gyuv/76sL6EEm9Xz/GYMWOCSpUqBU8++WSwYMGC4JVXXgmaNGkSDBgwIKwvISHk5uYGH330UfDRRx8FQHDrrbcGH330UfDtt98GQRAEo0ePDk455ZTC/RcsWBCUL18+uOSSS4K5c+cGd955Z5CcnBy89NJLYX0JJd6unuPHH388SElJCe68885tfv6tW7curC8hIezqef4l76q3c3b1POfm5gb169cPjj/++OCzzz4L3nzzzaBZs2bBGWecUWQZLU7F4F//+lfQoEGDIC0tLejatWvw7rvvFv7ZgQceGAwdOnSb/Z966qmgefPmQVpaWtC6devghRdeKObEiWdXzvFee+0VAL96jRkzpviDJ5hd/bv8cxannber5/mdd94JunXrFqSnpweNGzcO/va3vwXRaLSYUyeWXTnHBQUFwV//+tegSZMmQUZGRpCdnR2ce+65wdq1a4s/eAJ5/fXXt/u99sdzO3To0ODAAw/81THt27cP0tLSgsaNGwcPPvhgsedOJLt6jg888MDf3V/btzt/l3/O4rRzduc8z507N+jdu3dQrly5oH79+sGoUaOCTZs2FVnGSBA4ZyBJkiRJv8drnCRJkiRpByxOkiRJkrQDFidJkiRJ2gGLkyRJkiTtgMVJkiRJknbA4iRJkiRJO2BxkiRJkqQdsDhJkiRJ0g5YnCRJkiRpByxOkiRJkrQDFidJUpmxcuVKateuzQ033FC47Z133iEtLY2pU6eGmEySVNJFgiAIwg4hSVJxmTJlCv379+edd96hRYsWtG/fnqOPPppbb7017GiSpBLM4iRJKnOGDx/Oa6+9RufOnZkzZw4ffPAB6enpYceSJJVgFidJUpmzefNm9tlnHxYvXsysWbNo06ZN2JEkSSWc1zhJksqcr7/+mqVLlxKPx/nmm2/CjiNJSgCuOEmSypT8/Hy6du1K+/btadGiBbfffjtz5syhZs2aYUeTJJVgFidJUplyySWXMHHiRD7++GMqVqzIgQceSFZWFs8//3zY0SRJJZijepKkMuONN97g9ttv59FHHyUzM5OkpCQeffRR3nrrLe6+++6w40mSSjBXnCRJkiRpB1xxkiRJkqQdsDhJkiRJ0g5YnCRJkiRpByxOkiRJkrQDFidJkiRJ2gGLkyRJkiTtgMVJkiRJknbA4iRJkiRJO2BxkiRJkqQdsDhJkiRJ0g5YnCRJkiRpByxOkiRJkrQD/w+TXVlzokjzhAAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"##### Higher order accuracy boundary"
],
"metadata": {
"id": "nfVYawOlgt-O"
}
},
{
"cell_type": "markdown",
"source": [
"Alternately, as a bit of a trick to gain accuracy, the Neuman condition at the boundary can be considered with the central difference for $y_n$ (despite $y_{n+1}$ not existing!):\n",
"\n",
"$$ \\begin{align}\n",
"\\frac{y_{n+1}-y_{n-1}}{2h} &= 0\\\\\n",
"y_{n+1} &= y_{n-1}\n",
"\\end{align} $$\n",
"\n",
"We substitute this into the equation for the interior points to get:\n",
"\n",
"$$ 2y_{n-1}-2y_n -h^2(-4y_n+4x_n)=0$$\n",
"\n",
"which should have second order accuracy."
],
"metadata": {
"id": "6-XH5HX_drd0"
}
},
{
"cell_type": "markdown",
"source": [
"Now we have\n",
"\n",
"$$\\begin{bmatrix}\n",
"1 & 0 & & & \\\\\n",
"1 & -2+4h^2 & 1 & & \\\\\n",
" & \\ddots & \\ddots & \\ddots & \\\\\n",
" & & 1& -2+4h^2 & 1 \\\\\n",
" & & & 2 &-2+4h^2\n",
"\\end{bmatrix}\\left[\\begin{array}{c} y_0 \\\\y_1 \\\\ ... \\\\ y_{n-1}\\\\y_n \\end{array}\\right] =\n",
"\\left[\\begin{array}{c} 0 \\\\4h^2x_1 \\\\ ... \\\\ 4h^2x_{n-1} \\\\4h^2x_{n}\\end{array}\\right]$$\n",
"\n",
"Lets compare this solution vs the previous formula in terms of $y'(\\pi/2)$"
],
"metadata": {
"id": "mkrzLpghd0Xx"
}
},
{
"cell_type": "code",
"source": [
"def get_A_and_b_2(n):\n",
" h = (np.pi/2 - 0) / n\n",
"\n",
" # Get A\n",
" A = np.zeros((n+1, n+1))\n",
" A[0, 0] = 1\n",
" A[n, n] = -2+4*h**2\n",
" A[n, n-1] = 2\n",
" for i in range(1, n):\n",
" A[i, i-1] = 1\n",
" A[i, i] = -2 + 4*h**2\n",
" A[i, i+1] = 1\n",
"\n",
" # Get b\n",
" b = np.zeros(n+1)\n",
" for i in range(1, n+1):\n",
" b[i] = 4*h**2*(i*h)\n",
"\n",
" return A,b\n",
"\n",
"print('Old')\n",
"for n in range(10,30,5):\n",
" # Original implementation:\n",
" A,b = get_A_and_b(n)\n",
" y = sp.linalg.solve(A, b)\n",
" print(y[-1])\n",
"\n",
"print('New')\n",
"# New boundary condition\n",
"for n in range(10,30,5):\n",
" A,b = get_A_and_b_2(n)\n",
" y = sp.linalg.solve(A, b)\n",
" print(y[-1])\n",
"\n",
"print('True')\n",
"print(y_true(np.pi/2))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "j8Z4DRUgJDpK",
"outputId": "9cfe9862-000e-4593-b117-fb05d7528489"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Old\n",
"1.5641951194959582\n",
"1.5678968928038604\n",
"1.5691723081328415\n",
"1.569759027706592\n",
"New\n",
"1.5641814012620596\n",
"1.5678951310352263\n",
"1.5691718937395551\n",
"1.569758892476149\n",
"True\n",
"1.5707963267948966\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"The higher order implementation is more accurate (for the same computational complexity), but the step size still domainates the quality of the answer."
],
"metadata": {
"id": "HqIGgDkqjmY4"
}
},
{
"cell_type": "markdown",
"source": [
"## Example 3: Nonlinear systems"
],
"metadata": {
"id": "mmc6M2Z1Koyw"
}
},
{
"cell_type": "markdown",
"source": [
"Solve the boundary value problem,\n",
"\n",
"$$ \\begin{align}\n",
"y'' &= -3 y y'\n",
"\\end{align}\n",
"$$\n",
"\n",
"with $y(0) = 0$ and $y(2) = 1$. \n",
"\n",
"The Dirichlet boundary conditions are easy, and the interior points are given by:\n",
"$$ \\begin{align}\n",
"\\frac{y_{i-1} -2 y_i +y_{i+1}}{h^2} &= -3 y_i \\bigg[ \\frac{y_{i+1} - y_{i-1}}{2h} \\bigg]\n",
"\\end{align}\n",
"$$\n",
"\n",
"How do we solve this?"
],
"metadata": {
"id": "HlAboCBeKsM3"
}
},
{
"cell_type": "markdown",
"source": [
"Since this system is *nonlinear* we will need to use a *nonlinear solver* which is a root finder! In particular, we need to find the root of the residual,\n",
"\n",
"$$\n",
"\\begin{align}\n",
"y_{i-1} -2 y_i +y_{i+1} + 3 h y_i [y_{i+1} - y_{i-1}] &=0 \\\\\n",
"\\vec{R}(\\vec{y}) &= \\vec{0}\n",
"\\end{align}\n",
"$$\n",
"\n",
"\n",
"\n",
"\n"
],
"metadata": {
"id": "qRjARECqLonN"
}
},
{
"cell_type": "code",
"source": [
"from scipy.optimize import root\n",
"\n",
"def residual(y, n, h):\n",
" r = np.zeros(n + 1)\n",
" r[0] = y[0] # y(0) = 0\n",
" r[-1] = y[-1] - 1 # y(2) = 1\n",
" for i in range(1, n):\n",
" r[i] = y[i - 1] - 2 * y[i] + y[i + 1] + 3 * h * y[i] * (y[i + 1] - y[i - 1]) / 2\n",
" return r\n",
"\n",
"n = 10 # Number of grid points\n",
"y0 = np.linspace(0, 1, n + 1) # Initial guess\n",
"\n",
"# Solve the nonlinear system using scipy.optimize.root\n",
"sol = root(residual, y0, args=(n,2. / n, ))\n",
"print(sol)\n",
"y = sol.x\n",
"\n",
"# Plot the solution\n",
"x = np.linspace(0, 2, n + 1)\n",
"plt.plot(x, y)\n",
"plt.xlabel('x')\n",
"plt.ylabel('y(x)')\n",
"plt.title('Solution of the Nonlinear BVP')\n",
"plt.show()"
],
"metadata": {
"id": "gbYhk00Rhng_",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 819
},
"outputId": "06d32fc9-14dc-40cd-b431-af53afb13cf6"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" message: The solution converged.\n",
" success: True\n",
" status: 1\n",
" fun: [-3.711e-26 2.691e-11 -9.336e-11 1.270e-10 -4.548e-12\n",
" -1.767e-10 1.645e-10 -2.525e-11 -5.023e-11 3.169e-11\n",
" 0.000e+00]\n",
" x: [-3.711e-26 3.024e-01 5.545e-01 7.347e-01 8.498e-01\n",
" 9.181e-01 9.570e-01 9.785e-01 9.902e-01 9.966e-01\n",
" 1.000e+00]\n",
" method: hybr\n",
" nfev: 21\n",
" fjac: [[-7.178e-01 -6.963e-01 ... 2.602e-17 0.000e+00]\n",
" [ 5.736e-01 -5.914e-01 ... 2.989e-03 0.000e+00]\n",
" ...\n",
" [ 1.560e-02 -1.609e-02 ... -8.190e-01 0.000e+00]\n",
" [ 0.000e+00 -0.000e+00 ... 0.000e+00 -1.000e+00]]\n",
" r: [-1.393e+00 1.342e+00 ... -1.040e+00 -1.000e+00]\n",
" qtf: [-2.429e-10 5.987e-10 -2.227e-09 3.264e-10 -1.230e-09\n",
" 2.292e-09 2.220e-09 -3.106e-09 -8.640e-10 5.212e-10\n",
" 0.000e+00]\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABS9UlEQVR4nO3deVxUVf8H8M/MwMywL7IjAqLiiigi4ZKaKJlZlJZbLqQ9ZWop9Vi2aObz5JKplT655NbikkvWL81dXDFN1NQUQXEDWVVW2WbO7w9kcgQUFLjDzOf9es0LuXPuzPfMBefDnXPOlQkhBIiIiIiMhFzqAoiIiIhqEsMNERERGRWGGyIiIjIqDDdERERkVBhuiIiIyKgw3BAREZFRYbghIiIio8JwQ0REREaF4YaIiIiMCsMN0WPq3r07unfvXqOPefnyZchkMqxcubJGH7embdu2DYGBgVCr1ZDJZLh9+3a1H0Mmk2HcuHE1X5wBuv9npb4cZ6L6huGGTM7p06cxYMAAeHt7Q61Ww9PTE7169cLXX39d57WsXr0a8+fPr/PnrQmZmZl4+eWXYWFhgYULF+L777+HlZVVhW0PHz6MTz755JHCT03x8fGBTCbD+PHjy90XHR0NmUyGDRs2SFBZ/fXJJ59AJpPpbnK5HO7u7nj22Wdx5MgRAEBxcTGcnJzQpUuXSh9HCAEvLy+0b98ewD/Ho+xmbm6Oxo0bY/jw4bh06VKd9I3qNzOpCyCqS4cPH0aPHj3QqFEjvPbaa3Bzc8O1a9dw5MgRfPnllxW+8dWm1atX48yZM5gwYYLedm9vb9y5cwfm5uZ1Wk91HDt2DDk5OZg+fTrCwsIe2Pbw4cOYNm0aRo4cCXt7+7opsBJLly7F5MmT4eHhIWkdQP04zlXxzTffwNraGlqtFteuXcPSpUvx5JNP4ujRowgMDMRLL72ExYsX48qVK/D29i63//79+3H9+nVMnDhRb/tbb72F4OBgFBcXIzY2FkuWLMGWLVtw+vRpgzh+ZLgYbsik/Pe//4WdnR2OHTtW7k02LS1NmqIqIJPJoFarpS7jgcpeL6nDSnW0atUKcXFxmDlzJr766iupy6kXxzk/Px+WlpYPbDNgwAA4OTnpvo+IiEDr1q2xfv16BAYGYujQoVi0aBHWrFmD999/v9z+q1evhlwux6BBg/S2d+3aFQMGDAAAREZGolmzZnjrrbewatUqTJ48uQZ6R8aKH0uRSbl48SJatWpV4Ruyi4uL3vclJSWYPn06/Pz8oFKp4OPjgw8++ACFhYUPfI6VK1dCJpPh8uXLetvLTrVHR0cDKB1/sWXLFly5ckV3+t3HxwdA5WMx9uzZg65du8LKygr29vZ4/vnnce7cOb02ZR8VJCQk6M6U2NnZITIyEvn5+Q99jQBg/fr1CAoKgoWFBZycnPDKK68gKSlJd3/37t0xYsQIAEBwcDBkMhlGjhxZ4WN98skn+Pe//w0A8PX11fX1/tdn8+bNaN26NVQqFVq1aoVt27aVe6ykpCS8+uqrcHV11bVbvnx5lfoElH40NXz4cCxduhTJyckPbX/ixAn06dMHtra2sLa2Rs+ePXUft5QpO96HDh1CVFQUnJ2dYWVlhRdeeAHp6ekPfPyKjvPIkSNhbW2NpKQkREREwNraGs7Oznj33Xeh0Wj09tdqtZg/fz5atWoFtVoNV1dXvP7667h165Zeu19++QV9+/aFh4cHVCoV/Pz8MH369HKP1717d7Ru3RrHjx/Hk08+CUtLS3zwwQcPfZ3u5+bmBgAwMyv9+7lz587w8fHB6tWry7UtLi7Ghg0b0KNHj4eejXnqqacAAImJidWuiUwLz9yQSfH29kZMTAzOnDmD1q1bP7Dt6NGjsWrVKgwYMADvvPMO/vjjD8yYMQPnzp3Dzz///Ni1fPjhh8jKysL169cxb948AIC1tXWl7Xft2oU+ffqgcePG+OSTT3Dnzh18/fXX6Ny5M2JjY3XBqMzLL78MX19fzJgxA7Gxsfj222/h4uKCWbNmPbCulStXIjIyEsHBwZgxYwZSU1Px5Zdf4tChQzhx4gTs7e3x4Ycfwt/fH0uWLMGnn34KX19f+Pn5Vfh4L774Ii5cuIA1a9Zg3rx5ur/wnZ2ddW0OHjyITZs24c0334SNjQ2++uor9O/fH1evXkWDBg0AAKmpqXjiiSd0A5CdnZ3x+++/Y9SoUcjOzi730V5lPvzwQ3z33XcPPXtz9uxZdO3aFba2tpg0aRLMzc2xePFidO/eHfv27UNISIhe+/Hjx8PBwQFTp07F5cuXMX/+fIwbNw7r1q2rUl330mg0CA8PR0hICObMmYNdu3bhiy++gJ+fH8aMGaNr9/rrr+uO11tvvYXExEQsWLAAJ06cwKFDh3Qfd61cuRLW1taIioqCtbU19uzZgylTpiA7Oxuff/653nNnZmaiT58+GDRoEF555RW4uro+tN6bN28CKA1bSUlJmD59OtRqNV5++WUApWeohgwZgs8++wxnz55Fq1atdPtu27YNN2/exNChQx/6PBcvXgQA3c8EUaUEkQnZsWOHUCgUQqFQiNDQUDFp0iSxfft2UVRUpNfu5MmTAoAYPXq03vZ3331XABB79uzRbevWrZvo1q2b7vsVK1YIACIxMVFv37179woAYu/evbptffv2Fd7e3uXqTExMFADEihUrdNsCAwOFi4uLyMzM1G07deqUkMvlYvjw4bptU6dOFQDEq6++qveYL7zwgmjQoEFlL40QQoiioiLh4uIiWrduLe7cuaPb/ttvvwkAYsqUKeX6eezYsQc+phBCfP755xW+JkIIAUAolUqRkJCg1y8A4uuvv9ZtGzVqlHB3dxcZGRl6+w8aNEjY2dmJ/Pz8B9bg7e0t+vbtK4QQIjIyUqjVapGcnCyE+OfYrF+/Xtc+IiJCKJVKcfHiRd225ORkYWNjI5588slyr0NYWJjQarW67RMnThQKhULcvn1bt+3+n5WKjvOIESMEAPHpp5/q1d+uXTsRFBSk+/7AgQMCgPjxxx/12m3btq3c9opem9dff11YWlqKgoICvfoAiEWLFpVrX5Gyn7X7b/b29mLbtm16bc+ePSsAiMmTJ+ttHzRokFCr1SIrK0u3rex4LF++XKSnp4vk5GSxZcsW4ePjI2QyWZV+5si08WMpMim9evVCTEwMnnvuOZw6dQqzZ89GeHg4PD098euvv+rabd26FQAQFRWlt/8777wDANiyZUvdFQ3gxo0bOHnyJEaOHAlHR0fd9oCAAPTq1UtX773eeOMNve+7du2KzMxMZGdnV/o8f/75J9LS0vDmm2/qjQXp27cvmjdvXmv9DgsL0zvzExAQAFtbW93MGCEENm7ciH79+kEIgYyMDN0tPDwcWVlZiI2NrfLzffTRRygpKcHMmTMrvF+j0WDHjh2IiIhA48aNddvd3d0xZMgQHDx4sNzr+K9//QsymUz3fdeuXaHRaHDlypUq13Wvio7fvTOF1q9fDzs7O/Tq1Uvv9QgKCoK1tTX27t2ra2thYaH7d05ODjIyMtC1a1fk5+fj/Pnzes+jUqkQGRlZrVo3btyInTt3YseOHVixYgWaNWuG/v374/Dhw7o2LVu2RLt27bB27Vrdtry8PPz666949tlnYWtrW+5xX331VTg7O8PDwwN9+/ZFXl4eVq1ahQ4dOlSrPjI9/FiKTE5wcDA2bdqEoqIinDp1Cj///DPmzZuHAQMG4OTJk2jZsiWuXLkCuVyOJk2a6O3r5uYGe3v7R37DelRlz+fv71/uvhYtWmD79u3Iy8vTm4rdqFEjvXYODg4AgFu3blX4RvKw52nevDkOHjz4aB14iPtrBUrrLRs7kp6ejtu3b2PJkiVYsmRJhY9RnQHhjRs3xrBhw7BkyZIKB7imp6cjPz+/0te7bFbQvR+vPOj1ri61Wq33sV3Z4937WPHx8cjKyio3VqzMva/H2bNn8dFHH2HPnj3lQllWVpbe956enlAqldWq98knn9QbUDxgwAA0bdoU48ePx/Hjx3Xbhw4dinfffReHDx9Gp06dsHnzZuTn51f6kdSUKVPQtWtXKBQKODk5oUWLFrpxPEQPwp8SMllKpRLBwcEIDg5Gs2bNEBkZifXr12Pq1Km6Nvf+JV5Vle1z/+DN2qZQKCrcLoSo0zqq4mG1arVaAMArr7yiG8h8v4CAgGo954cffojvv/8es2bNQkRERLX2rUhNvt6VPda9tFotXFxc8OOPP1Z4f1k4un37Nrp16wZbW1t8+umn8PPzg1qtRmxsLN577z3da1vm3rM8j8ra2hohISH45Zdf9EL34MGDMWnSJKxevRqdOnXC6tWr4eDggGeeeabCx2nTps1DlxkgqgjDDRGgO81948YNAKUDj7VaLeLj49GiRQtdu9TUVNy+fbvCtTrKlP3Ffv+CdRWd7alqeCp7vri4uHL3nT9/Hk5OTpUuoFcd9z5P2cyUMnFxcQ/s94M8Ski8l7OzM2xsbKDRaGrszc7Pzw+vvPIKFi9eXG5wsLOzMywtLSt9veVyOby8vGqkjkfl5+eHXbt2oXPnzg8MJNHR0cjMzMSmTZvw5JNP6rbX9oyjkpISAEBubq7uZ9PDwwM9evTA+vXr8fHHH2Pnzp0YOXJktc8UET0Mx9yQSdm7d2+Ff0mXjVkp+xii7C/J+1cPnjt3LoDSMSiVKRs7sn//ft02jUZT4ccpVlZW5T4WqIi7uzsCAwOxatUqvdB05swZ7Nixo9K/fKurQ4cOcHFxwaJFi/SmvP/+++84d+7cA/v9IGVvbo+6QrFCoUD//v2xceNGnDlzptz9D5tyXZmPPvoIxcXFmD17drnn6927N3755Re9KeupqalYvXo1unTpUulHe3Xl5ZdfhkajwfTp08vdV1JSonuty84C3ftzX1RUhP/973+1VtvNmzdx+PBhuLm5lfvYbOjQoUhLS8Prr7+O4uLiKs2SIqounrkhkzJ+/Hjk5+fjhRdeQPPmzVFUVITDhw9j3bp18PHx0Q2kbNu2LUaMGIElS5boTusfPXoUq1atQkREBHr06FHpc7Rq1QpPPPEEJk+ejJs3b8LR0RFr167V/SV7r6CgIKxbtw5RUVEIDg6GtbU1+vXrV+Hjfv755+jTpw9CQ0MxatQo3VRwOzs7fPLJJzXy+pibm2PWrFmIjIxEt27dMHjwYN1UcB8fn3IryFZVUFAQgNKPggYNGgRzc3P069evWmebZs6cib179yIkJASvvfYaWrZsiZs3byI2Nha7du3STUeujrKzN6tWrSp333/+8x/s3LkTXbp0wZtvvgkzMzMsXrwYhYWF5cKQFLp164bXX38dM2bMwMmTJ9G7d2+Ym5sjPj4e69evx5dffokBAwagU6dOcHBwwIgRI/DWW29BJpPh+++/r9GPJzds2ABra2sIIZCcnIxly5bh1q1bWLRoUbmzdv3798ebb76JX375BV5eXnpnk4hqjGTztIgk8Pvvv4tXX31VNG/eXFhbWwulUimaNGkixo8fL1JTU/XaFhcXi2nTpglfX19hbm4uvLy8xOTJk/WmzgpRfnqvEEJcvHhRhIWFCZVKJVxdXcUHH3wgdu7cWW4qeG5urhgyZIiwt7cXAHTTwiuaIiyEELt27RKdO3cWFhYWwtbWVvTr10/8/fffem3Kpuemp6frba9sinpF1q1bJ9q1aydUKpVwdHQUQ4cOFdevX6/w8ao6LXf69OnC09NTyOVyvToAiLFjx5Zr7+3tLUaMGKG3LTU1VYwdO1Z4eXkJc3Nz4ebmJnr27CmWLFny0Oe/dyr4veLj44VCoSg3FVwIIWJjY0V4eLiwtrYWlpaWokePHuLw4cN6bSp7HSqa+l/VqeBWVlbl6iw7rvdbsmSJCAoKEhYWFsLGxka0adNGTJo0STfNXQghDh06JJ544glhYWEhPDw8dEsgVFRfq1atyj1HZSqaCm5lZSVCQ0PFTz/9VOl+L730kgAgJk2aVOH9FU3NJ6oOmRAGOLqQiIiI6BFxzA0REREZFYYbIiIiMioMN0RERGRUGG6IiIjIqDDcEBERkVFhuCEiIiKjYnKL+Gm1WiQnJ8PGxuaxl4QnIiKiuiGEQE5ODjw8PCCXP/jcjMmFm+TkZMmvCUNERESP5tq1a2jYsOED25hcuLGxsQFQ+uJIfW0YIiIiqprs7Gx4eXnp3scfxOTCTdlHUba2tgw3RERE9UxVhpRwQDEREREZFYYbIiIiMioMN0RERGRUGG6IiIjIqDDcEBERkVFhuCEiIiKjwnBDRERERoXhhoiIiIwKww0REREZFYYbIiIiMiqShpv9+/ejX79+8PDwgEwmw+bNmx+6T3R0NNq3bw+VSoUmTZpg5cqVtV4nERER1R+Shpu8vDy0bdsWCxcurFL7xMRE9O3bFz169MDJkycxYcIEjB49Gtu3b6/lSomIiKi+kPTCmX369EGfPn2q3H7RokXw9fXFF198AQBo0aIFDh48iHnz5iE8PLy2yiQiIqJKaLQCRSXa0pum9KaQyeBmp5aspnp1VfCYmBiEhYXpbQsPD8eECRMq3aewsBCFhYW677Ozs2urPCIiohonhCgNEBotiksECjUaFGtKA0WxpjRUFN7z77KvRbrvBYpK7u6jeVjbe/fRolCjRfHd++/d597H0IryNQf7OGD9G53q/sW6q16Fm5SUFLi6uuptc3V1RXZ2Nu7cuQMLC4ty+8yYMQPTpk2rqxKJiMiElWi0yCvSIL+oBHmF930t0iCvsAR5hSXIL9Igr6gE+YX6Xyu6r7BEC1FBgDBUSjM5FHKZpDXUq3DzKCZPnoyoqCjd99nZ2fDy8pKwIiIiMgTFGu0/4eJuCNEPGveHE/379MLJ3eBSWKKtk9qVZnKoFHKYm8mhVMihNJPDXCGD0kwBpUJ293u53lel4t62Zdsqbqsq+7fec8igVChgbiYr3a4obXfvfmZyGWQyaYMNUM/CjZubG1JTU/W2paamwtbWtsKzNgCgUqmgUqnqojwiIpJIflEJMnOLkJFbiIzcImTmFv7z77wiZOQU4mZeEXILS3RnUYpqMYiYyWWwUpnBSqmAZdlXpVnpNtXdf997n8oM1rrtZrBUKUq/KhVQmeuHEkMJEIasXoWb0NBQbN26VW/bzp07ERoaKlFFRERUG7Ragdt3iu8GlEJdcNELMHn/3JdfpHnk51Iq5HphQj9o3B9OSr9aq0rbWt3/9W6AUZpxGTkpSRpucnNzkZCQoPs+MTERJ0+ehKOjIxo1aoTJkycjKSkJ3333HQDgjTfewIIFCzBp0iS8+uqr2LNnD3766Sds2bJFqi4QEVEVFRRrkJmnf1alLJxk3vN9Rm4RbuUXQVPRSNUHUJnJ4WStgpO1Ek7WKjSwVqKBtUq3zdFKCRu1+T9nSpRmsFAqGESMkKTh5s8//0SPHj1035eNjRkxYgRWrlyJGzdu4OrVq7r7fX19sWXLFkycOBFffvklGjZsiG+//ZbTwImIJCCEQPadEqTnFiIzt7D04x+90KJ/xiWnsKTaz2FvaY4GVsq7AaU0pDS4G1z0g4wKVkoFP64hAIBMiPo0BvvxZWdnw87ODllZWbC1tZW6HCIigyaEQGp2IRLScpGQloOE9FwkpOXiSmY+MnILUayp3luIuUKGBlYqONkoS79WeKal9HtHKyXMFTyrQqWq8/5dr8bcEBFR7dBoBa7ezL8bYu7e0nNxKS33oWdcbNRmpeHE6p+Qcu9Zlnu32arNeHaFah3DDRGRCSko1uBSep7uDMzFu0EmMSMPRZqKZw/JZYB3Ayv4OVujiUvpzc/ZCq62ajhaKaE2V9RxL4gejOGGiMgIZd0p/ie8pP9zNubarfxKF4RTmcnRuCzA3BNkfJwsoTJjgKH6g+GGiKieEkIgLadQ/6Oku2EmPaew0v1s1Wa64KK7OdvA08FC8pVliWoCww0RkYHTaAWu3yo/HiYhLRc5BZWPh3G1VemdhfG7G2ScrVUc90JGjeGGiMhAFJZokJiRV+5MzKWMvEpX05XLgEaOlv+El3uCjK3avI57QGQYGG6IiCQghMDF9FzsPZ+OPxJvIiEtB1dv5ld4hWWg9FpCjZ2syn2c5NPAigN6ie7DcENEVEfuFGkQcykDe8+nY29cGq7fulOujU3ZeBhn/RDT0MGS42GIqojhhoioFl3NzMfeuDTsjUtDzMVMvatGK83keKJxAzzZ1Akt3W1Lx8PYcDwM0eNiuCEiqkGFJRocS7ylCzSX0vP07ve0t0CP5s7o4e+CUL8GsFTyv2GimsbfKiKix5R8+w6i40o/ajqUkKF3hWozuQzBPo66QNPExZpnZohqGcMNEVE1FWu0iL1yC3vj0hEdl4bzKTl697vYqNDD3wU9mjujcxMn2HDWElGdYrghIqqCtJwC7ItLR3RcOvbHp+utLyOXAe0aOeCp5i7o7u+Mlu62PDtDJCGGGyKiCmi0An9dv42959OwNy4dp5Oy9O53tFKiWzNndPd3xpNNneFgpZSoUiK6H8MNEdFdt/KKsD++9OzMvgvpuJlXpHd/QEM7dPd3QQ9/ZwQ0tOfUbCIDxXBDRCZLCIGzydmIjis9O3Pi6i29RfRs1GZ4slnpQOBuzZzhbKOSrlgiqjKGGyIyKdkFxTgUn4G9cWmIjktH2n0XmGzuZoMezV3Qw98F7RrZw1whl6hSInpUDDdEZNSEEIhPy707diYNf16+hZJ7Ts9YKhXo3MQJPfxLBwN72FtIWC0R1QSGGyIyOvlFJTickKk7O5N0W/8yB42drUqnavu7INjXASozXpuJyJgw3BCRUdBoBX77KxkbY5Nw5FKm3lW0VWZyhPo10J2d8W5gJWGlRFTbGG6IqF7TagW2nU3BvJ0XEJ+Wq9ve0MECT90dO/NE4wawUPLsDJGpYLghonpJCIEdf6di3s4LuhWCbdVmiOzsi35t3eHnzMscEJkqhhsiqleEENgbl4a5Oy/gTFI2AMBGZYZXu/ji1S6+sLPgpQ6ITB3DDRHVC0IIHIjPwNydF3Dy2m0ApTOdIjv74LWujWFvyRWCiagUww0RGbzDFzMwb+cFHLt8CwCgNpdjRKgP/vVkYzSw5sJ6RKSP4YaIDNbRxJuYuzMORy7dBAAozeR4JcQbb3RvDBcbtcTVEZGhYrghIoMTe/UW5u28gAPxGQAApUKOwR298GaPJnC1ZaghogdjuCEig/HX9duYt/MC9salAwDM5DK8HOyFsT2awJMrBxNRFTHcEJHkziZnYd7OeOw6lwoAUMhl6N/eE+OfagovR0uJqyOi+obhhogkE5eSg/m7LuD3MykAALkMiGjnibeeagofJ64iTESPhuGGiOpcQlouvtwdj9/+SoYQgEwG9AvwwFs9m6KJi7XU5RFRPcdwQ0R15nJGHr7aHY/NJ5NQdmHuZ9q4YUJYMzRztZG2OCIyGgw3RFTrrt3Mx9d74rExNgmau6mmV0tXTAxrhpYethJXR0TGhuGGiGpN0u07WLAnAev/vIaSu6HmqeYumBjWDG0a2klcHREZK4YbIqpxKVkF+F90AtYevYYijRYA0LWpEyb2aob2jRwkro6IjB3DDRHVmLScAiyKvoQf/riCopLSUNPJrwEm9mqGYB9HiasjIlPBcENEjy0ztxCL91/CdzGXUVBcGmqCfRwQ1csfoX4NJK6OiEwNww0RPbLb+UVYsv8SVh6+jPwiDQAg0Mse7/Ruhi5NnCCTySSukIhMEcMNEVVb1p1iLDuYiOUHE5FbWAIACGhoh4m9mqF7M2eGGiKSFMMNEVVZTkExVh66jKUHLiG7oDTUtHC3RVSvZghr4cJQQ0QGgeGGiB4qr7AEq2IuY8n+S7idXwwAaOZqjYlhzRDeyg1yOUMNERkOhhsiqtSdIg1+OHIFi/ZdRGZeEQDAz9kKE8KaoW8bd4YaIjJIDDdEVKFNsdcx4/fzSM8pBAD4NLDE22FN8VxbTygYaojIgDHcEJEerVZg1rbzWLz/EgCgoYMF3urZFC+284SZQi5xdURED8dwQ0Q6d4o0iPrpJH4/kwIAeKtnU4zr0QRKM4YaIqo/GG6ICEDp6sKvfXccp67dhlIhx+wBAYho5yl1WURE1cZwQ0S4kJqDyBXHkHT7DhwszbF4WAd09OXlEoiofmK4ITJxB+LT8eYPscgpLIGvkxWWjwyGr5OV1GURET0yhhsiE7bm6FV8tPkMNFqBjr6OWPxKEByslFKXRUT0WBhuiEyQViswa/t5LN5XOiPqhXaemNm/DVRmCokrIyJ6fAw3RCamoFiDiev+mRE1Iawp3u7ZlJdOICKjwXBDZELScwox+rs/dTOiZg1ogxfaNZS6LCKiGsVwQ2Qi4lNzMPLujCh7S3MsfiUIIY0bSF0WEVGNY7ghMgEH4zMw5ofjyCksgU8DS6yI7MgZUURktBhuiIzc2rszokq0AsE+DlgyrANnRBGRUWO4ITJSWq3A7O1xWLTvIgAgItADswYEcEYUERk9yS8Ys3DhQvj4+ECtViMkJARHjx59YPv58+fD398fFhYW8PLywsSJE1FQUFBH1RLVDwXFGoxbE6sLNm/3bIp5AwMZbIjIJEh65mbdunWIiorCokWLEBISgvnz5yM8PBxxcXFwcXEp13716tV4//33sXz5cnTq1AkXLlzAyJEjIZPJMHfuXAl6QGR40nMK8dp3f+LktdswV8gwq38AXmzPGVFEZDpkQggh1ZOHhIQgODgYCxYsAABotVp4eXlh/PjxeP/998u1HzduHM6dO4fdu3frtr3zzjv4448/cPDgwSo9Z3Z2Nuzs7JCVlQVbW9ua6QiRgYhPzUHkymO4foszoojIuFTn/Vuyj6WKiopw/PhxhIWF/VOMXI6wsDDExMRUuE+nTp1w/Phx3UdXly5dwtatW/HMM89U+jyFhYXIzs7WuxEZo4PxGXjxm8O4fusOfBpYYtOYTgw2RGSSJPtYKiMjAxqNBq6urnrbXV1dcf78+Qr3GTJkCDIyMtClSxcIIVBSUoI33ngDH3zwQaXPM2PGDEybNq1GaycyNOuOXcWHP/8zI2rxsA5w5IwoIjJRkg8oro7o6Gh89tln+N///ofY2Fhs2rQJW7ZswfTp0yvdZ/LkycjKytLdrl27VocVE9UurVZg1rbzeG/jaZRoBZ4P9MAPo0MYbIjIpEl25sbJyQkKhQKpqal621NTU+Hm5lbhPh9//DGGDRuG0aNHAwDatGmDvLw8/Otf/8KHH34Iubx8VlOpVFCpVDXfASKJFRRr8M5Pp7Dl9A0AwFs9m2JiGK8RRUQk2ZkbpVKJoKAgvcHBWq0Wu3fvRmhoaIX75OfnlwswCkXp1FYJx0UT1bmM3EIMXnoEW07fgLlChi9eaouoXs0YbIiIIPFU8KioKIwYMQIdOnRAx44dMX/+fOTl5SEyMhIAMHz4cHh6emLGjBkAgH79+mHu3Llo164dQkJCkJCQgI8//hj9+vXThRwiY3fvjCg7C3MsHhaEJzhwmIhIR9JwM3DgQKSnp2PKlClISUlBYGAgtm3bphtkfPXqVb0zNR999BFkMhk++ugjJCUlwdnZGf369cN///tfqbpAVKcOJWTgjR+OI6egBN4NLLF8ZDD8nK2lLouIyKBIus6NFLjODdVXPx27hg9+Lh043MHbAUuGc0YUEZmO6rx/89pSRAZOqxWYsyMO/4suvZTCc209MHtAANTm/CiWiKgiDDdEBqzcjKinmmAiBw4TET0Qww2RgcrILb1G1ImrpdeImvliAPoH8RpRREQPw3BDZIAS0kpnRF27eQe2ajMsHtYBoX6cEUVEVBUMN0QG5nBCBl6/OyOqkaMlVkRyRhQRUXUw3BAZkHtnRAV5O2DJsCA0sOYK20RE1cFwQ2QAtFqBL3bGYeHe0hlR/dp64HPOiCIieiQMN0QSKyjW4N31p/DbX6UzosY/1QQTw5pBLueMKCKiR8FwQyShzLszomLvzoj67IU2eKmDl9RlERHVaww3RBJJSMvFqyuP4erNfNiqzbBoWBA6+TlJXRYRUb3HcEMkgcMXM/DG98eRfXdG1PKRwWjiwhlRREQ1geGGqI6t//MaJm8qnRHVvpE9lg7vwBlRREQ1iOGGqI5otQJzd17Agr0JAIBnA9wx56W2nBFFRFTDGG6I6sD9M6LG9vDDO738OSOKiKgWMNwQ1bJijRaRK44h5lImzOQyfPZiG7zMGVFERLWG4Yaols3deQExlzJhrTLDkmFB6NSEM6KIiGqTXOoCiIxZdFwavokuXXV49oAABhsiojrAcENUS1KzCxD10ykAwLAnvPFMG3eJKyIiMg0MN0S1oESjxVtrTuBmXhFautviw74tpC6JiMhkMNwQ1YKvdsfjj8SbsFIqsHBoe073JiKqQww3RDXsUEIGvr67ls1nL7aBr5OVxBUREZkWhhuiGpSWU4C3156EEMDgjl54PtBT6pKIiEwOww1RDdFoBSauO4mM3EL4u9pgyrOtpC6JiMgkMdwQ1ZD/7U3AoYRMWJgrsHBoO1goOc6GiEgKDDdENeDIpUzM23UBAPCfiNZo4mIjcUVERKaL4YboMWXmFuLttSegFUD/9g3RP6ih1CUREZk0hhuix6DVCkT9dAqp2YVo4mKN6REcZ0NEJDWGG6LHsHj/Jey7kA6VmRwLh7SHpZKXayMikhrDDdEj+vPyTczZEQcAmPZcK/i7cZwNEZEhYLghegS38orw1poT0GgFng/0wMBgL6lLIiKiuxhuiKpJCIF/bziF5KwC+DpZ4b8vtIFMJpO6LCIiuovhhqialh1MxK5zaVCaybFgSDtYqzjOhojIkDDcEFXDyWu3MfP38wCAj59tiVYedhJXRERE92O4IaqirDvFGLc6FiVagb5t3PFKSCOpSyIiogow3BBVgRACkzacwvVbd9DI0RIz+nOcDRGRoWK4IaqC72KuYPvZVJgrZFgwpB1s1eZSl0RERJVguCF6iDNJWfjvlnMAgA+eaYGAhvbSFkRERA/EcEP0ADkFxRi7OhZFGi16t3TFyE4+UpdEREQPwXBDVAkhBN7fdBpXMvPhaW+Bzwe05TgbIqJ6gOGGqBKrj17Flr9uwEwuw9dD2sHOkuNsiIjqA4Ybogr8nZyNaf/3NwBg0tP+aN/IQeKKiIioqhhuiO6TV1iCcatjUVSixVPNXTC6S2OpSyIiompguCG6hxACH20+g0sZeXC3U+OLl9pCLuc4GyKi+oThhuge6/+8jp9PJEEhl+Grwe3gYKWUuiQiIqomhhuiuy6k5mDKr2cAAFG9miHYx1HiioiI6FEw3BAByC8qwdgfY1FQrEXXpk4Y081P6pKIiOgRMdwQAZj6y1nEp+XCxUaFeQMDOc6GiKgeY7ghk7cp9jrWH78OuQz4clA7OFmrpC6JiIgeA8MNmbSEtFx8tLl0nM3bPZsh1K+BxBUREdHjYrghk1VQrMG41bHIL9Kgk18DjHuqidQlERFRDWC4IZM17f/+xvmUHDhZKzF/UCAUHGdDRGQUGG7IJP16Khlrjl6FTAbMH9gOLjZqqUsiIqIawnBDJudyRh4+2HQaADC2exN0aeokcUVERFSTGG7IpBQUazB2dSxyC0vQ0ccRE8KaSl0SERHVMIYbMikztp7D2eRsOFia46vB7WCm4K8AEZGx4f/sZDJ+P30Dq2KuAADmDgyEmx3H2RARGSPJw83ChQvh4+MDtVqNkJAQHD169IHtb9++jbFjx8Ld3R0qlQrNmjXD1q1b66haqq+uZuZj0sa/AACvd2uMHv4uEldERES1xUzKJ1+3bh2ioqKwaNEihISEYP78+QgPD0dcXBxcXMq/+RQVFaFXr15wcXHBhg0b4OnpiStXrsDe3r7ui6d6o6hEi/FrYpFTUIL2jezxbm9/qUsiIqJaJBNCCKmePCQkBMHBwViwYAEAQKvVwsvLC+PHj8f7779frv2iRYvw+eef4/z58zA3N3+k58zOzoadnR2ysrJga2v7WPVT/TD9t7+x7GAi7CzMsfXtrvC0t5C6JCIiqqbqvH9L9rFUUVERjh8/jrCwsH+KkcsRFhaGmJiYCvf59ddfERoairFjx8LV1RWtW7fGZ599Bo1GU+nzFBYWIjs7W+9GpmPn36lYdjARADDnpbYMNkREJkCycJORkQGNRgNXV1e97a6urkhJSalwn0uXLmHDhg3QaDTYunUrPv74Y3zxxRf4z3/+U+nzzJgxA3Z2drqbl5dXjfaDDFfS7Tt4d/0pAMCoLr7o1dL1IXsQEZExkHxAcXVotVq4uLhgyZIlCAoKwsCBA/Hhhx9i0aJFle4zefJkZGVl6W7Xrl2rw4pJKsUaLcavjkXWnWK0bWiH955uLnVJRERURyQbUOzk5ASFQoHU1FS97ampqXBzc6twH3d3d5ibm0OhUOi2tWjRAikpKSgqKoJSqSy3j0qlgkqlqtniyeDN2RGH2Ku3YaM2w4Ih7aE0q1c5noiIHoNk/+MrlUoEBQVh9+7dum1arRa7d+9GaGhohft07twZCQkJ0Gq1um0XLlyAu7t7hcGGTNPeuDQs3ncJADC7fwC8HC0lroiIiOqSpH/ORkVFYenSpVi1ahXOnTuHMWPGIC8vD5GRkQCA4cOHY/Lkybr2Y8aMwc2bN/H222/jwoUL2LJlCz777DOMHTtWqi6QgUnJKsA7P5WOsxke6o0+bdwlroiIiOqapOvcDBw4EOnp6ZgyZQpSUlIQGBiIbdu26QYZX716FXL5P/nLy8sL27dvx8SJExEQEABPT0+8/fbbeO+996TqAhmQEo0Wb605gZt5RWjlYYsPnmkhdUlERCQBSde5kQLXuTFeX+yIw9d7EmCtMsNv47vAx8lK6pKIiKiG1It1bohq0sH4DCzYmwAA+OzFNgw2REQmjOGG6r207AJMWHcCQgCDOzbCc209pC6JiIgkxHBD9ZpGKzBh3Ulk5BahuZsNpvZrKXVJREQkMYYbqtcW7EnA4YuZsFQqsGBIe6jNFQ/fiYiIjBrDDdVbMRcz8eXuCwCA/0S0RhMXa4krIiIiQ8BwQ/VSRm4h3l57AloBvBTUEC+2byh1SUREZCAYbqje0WoFJq47ibScQjR1sca051tJXRIRERkQhhuqd77ZdxEH4jOgNpdj4dD2sFRKuhYlEREZGIYbqlcuZ+Rh3s7ScTafPtcazVxtJK6IiIgMDcMN1Stf7LyAEq1At2bOeKkDx9kQEVF5DDdUb5xJysL/nUoGALz3dHPIZDKJKyIiIkPEcEP1xufb4wAAzwd6oKUHrwtGREQVY7iheiHmYib2XUiHmVyGqF7NpC6HiIgMGMMNGTwhBGZtOw8AGBLSCN4NeFFMIiKqHMMNGbwdf6fi5LXbsDBXYNxTTaQuh4iIDBzDDRk0jVboxtqM6uILFxu1xBUREZGhe6TVz4qLi5GSkoL8/Hw4OzvD0dGxpusiAgBsjL2OhLRc2Fua41/dGktdDhER1QNVPnOTk5ODb775Bt26dYOtrS18fHzQokULODs7w9vbG6+99hqOHTtWm7WSiSko1mD+3QX7xnZvAlu1ucQVERFRfVClcDN37lz4+PhgxYoVCAsLw+bNm3Hy5ElcuHABMTExmDp1KkpKStC7d288/fTTiI+Pr+26yQT8cOQKkrMK4G6nxrBQb6nLISKieqJKH0sdO3YM+/fvR6tWFV+gsGPHjnj11VexaNEirFixAgcOHEDTpk1rtFAyLTkFxVi4NwEAMCGsKdTmCokrIiKi+qJK4WbNmjVVejCVSoU33njjsQoiAoCl+y/hVn4x/Jyt0L89L7NARERVV+3ZUunp6ZXed/r06ccqhggA0nMK8e3BRADAv8P9YabgpD4iIqq6ar9rtGnTBlu2bCm3fc6cOejYsWONFEWmbeHeBOQXadC2oR3CW7lJXQ4REdUz1Q43UVFR6N+/P8aMGYM7d+4gKSkJPXv2xOzZs7F69eraqJFMyLWb+fjxjysAeHFMIiJ6NNUON5MmTUJMTAwOHDiAgIAABAQEQKVS4a+//sILL7xQGzWSCZm78wKKNQJdmzqhUxMnqcshIqJ66JEGMzRp0gStW7fG5cuXkZ2djYEDB8LNjR8f0OM5dyMbm08mAQAmhTeXuBoiIqqvqh1uDh06hICAAMTHx+Ovv/7CN998g/Hjx2PgwIG4detWbdRIJmLO9jgIAfQNcEebhnZSl0NERPVUtcPNU089hYEDB+LIkSNo0aIFRo8ejRMnTuDq1ato06ZNbdRIJuDY5ZvYfT4NCrkM7/b2l7ocIiKqx6p9bakdO3agW7duetv8/Pxw6NAh/Pe//62xwsh0CCEw6/fzAICBwV7wdbKSuCIiIqrPqn3m5v5go3sguRwff/zxYxdEpmfP+TT8eeUWVGZyvN2TK1sTEdHjqVK4Wbt2bZUf8Nq1azh06NAjF0SmRaMVmL0tDgAQ2dkXrrZqiSsiIqL6rkrh5ptvvkGLFi0we/ZsnDt3rtz9WVlZ2Lp1K4YMGYL27dsjMzOzxgsl4/TLySTEpebAVm2GMd38pC6HiIiMQJXG3Ozbtw+//vorvv76a0yePBlWVlZwdXWFWq3GrVu3kJKSAicnJ4wcORJnzpyBq6trbddNRqCwRIO5Oy8AAMZ0bwI7S3OJKyIiImNQ5QHFzz33HJ577jlkZGTg4MGDuHLlCu7cuQMnJye0a9cO7dq1g1zOawBR1a354yqu37oDFxsVRnbykbocIiIyEtWeLfXOO+9g1KhRiIiIqIVyyFTkFpbg6z0JAIC3w5rCQqmQuCIiIjIW1T7VkpWVhbCwMDRt2hSfffYZkpOTa6MuMnLLDiQiM68Ivk5WeLmDl9TlEBGREal2uNm8eTOSkpIwZswYrFu3Dt7e3ujTpw82bNiA4uLi2qiRjExmbiGWHrgEAHindzOYK/hxJhER1ZxHeldxdnZGVFQUTp06hT/++ANNmjTBsGHD4OHhgYkTJyI+Pr6m6yQj8r/oi8gtLEFrT1s809pd6nKIiMjIPNafzDdu3MDOnTuxc+dOKBQKPPPMMzh9+jRatmyJefPm1VSNZESu38rH9zFXAADvPd0ccrlM4oqIiMjYVDvcFBcXY+PGjXj22Wfh7e2N9evXY8KECUhOTsaqVauwa9cu/PTTT/j0009ro16q5+bvikeRRotOfg3QpYmT1OUQEZERqvZsKXd3d2i1WgwePBhHjx5FYGBguTY9evSAvb19DZRHxuRCag42xV4HAEx6ujlkMp61ISKimlftcDNv3jy89NJLUKsrXybf3t4eiYmJj1UYGZ852+OgFcDTrdwQ6GUvdTlERGSkqh1uhg0bVht1kJE7fuUWdvydCrkMeDfcX+pyiIjIiHEOLtU6IQRmbTsPAHgpyAtNXKwlroiIiIwZww3Vun0X0nE08SaUZnK8HdZU6nKIiMjIMdxQrdJqBWZtiwMAjAj1hoe9hcQVERGRsWO4oVr1f38l49yNbNiozPBm9yZSl0NERCaA4YZqTVGJFl/suAAAeL1bYzhYKSWuiIiITAHDDdWadX9ew9Wb+XCyVuHVLr5Sl0NERCaC4YZqRX5RCb7aXXqNsbd7NoGlstqrDhARET0ShhuqFSsOXUZ6TiEaOVpiYHAjqcshIiITwnBDNe5WXhEWRV8EALzTuxmUZvwxIyKiusN3Hapx3+y7iJzCErRwt0W/AA+pyyEiIhPDcEM16kbWHaw8fBkAMOlpf8jlvDgmERHVLYYbqlFf7opHUYkWHX0d0b2Zs9TlEBGRCWK4oRqTkJaLn/68BgB472l/yGQ8a0NERHXPIMLNwoUL4ePjA7VajZCQEBw9erRK+61duxYymQwRERG1WyBVyRc74qAVQFgLVwR5O0pdDhERmSjJw826desQFRWFqVOnIjY2Fm3btkV4eDjS0tIeuN/ly5fx7rvvomvXrnVUKT3IqWu38fuZFMhkpWNtiIiIpCJ5uJk7dy5ee+01REZGomXLlli0aBEsLS2xfPnySvfRaDQYOnQopk2bhsaNG9dhtVSZ2dvPAwBebNcQzVxtJK6GiIhMmaThpqioCMePH0dYWJhum1wuR1hYGGJiYird79NPP4WLiwtGjRpVF2XSQxyMz8ChhEwoFXJM7NVU6nKIiMjESbomfkZGBjQaDVxdXfW2u7q64vz58xXuc/DgQSxbtgwnT56s0nMUFhaisLBQ9312dvYj10vlabUCs7aVHqtXnvBGQwdLiSsiIiJTJ/nHUtWRk5ODYcOGYenSpXBycqrSPjNmzICdnZ3u5uXlVctVmpbfz6TgdFIWrJQKjO3hJ3U5RERE0p65cXJygkKhQGpqqt721NRUuLm5lWt/8eJFXL58Gf369dNt02q1AAAzMzPExcXBz0//DXby5MmIiorSfZ+dnc2AU0OKNVrM2REHAHjtycZoYK2SuCIiIiKJw41SqURQUBB2796tm86t1Wqxe/dujBs3rlz75s2b4/Tp03rbPvroI+Tk5ODLL7+sMLSoVCqoVHzTrQ3r/7yOxIw8NLBSYnRXDuwmIiLDIGm4AYCoqCiMGDECHTp0QMeOHTF//nzk5eUhMjISADB8+HB4enpixowZUKvVaN26td7+9vb2AFBuO9WuO0UafLn7AgBg3FNNYK2S/EeJiIgIgAGEm4EDByI9PR1TpkxBSkoKAgMDsW3bNt0g46tXr0Iur1dDg0zCqpjLSM0uhKe9BYaENJK6HCIiIh2ZEEJIXURdys7Ohp2dHbKysmBrayt1OfVSVn4xus7eg+yCEnzxUlv0D2oodUlERGTkqvP+zVMiVG2L9l9EdkEJ/F1tENHOU+pyiIiI9DDcULWkZhdgxaFEAMC/w/2hkPPimEREZFgYbqhavtodj4JiLYK8HdCzhYvU5RAREZXDcENVlpiRh7XHrgEA3nu6OWQynrUhIiLDw3BDVfbFjjhotAJPNXdBR19HqcshIiKqEMMNVcmZpCz89tcNyGSlY22IiIgMFcMNVcns7aWXWXi+rQdauHMKPRERGS6GG3qowxczsP9COswVMkT14lkbIiIybAw39EBCCMzaVnrWZkjHRmjUwFLiioiIiB6M4YYeaPvZVJy6dhuWSgXGPdVU6nKIiIgeiuGGKlWi0WLOjtKzNqO6+MLZhldXJyIiw8dwQ5XaFJuEhLRcOFia47UnG0tdDhERUZUw3FCFCoo1mLfrAgBgbI8msFWbS1wRERFR1TDcUIV+OHIFN7IK4G6nxitPeEtdDhERUZUx3FA52QXFWLA3AQAwMawZ1OYKiSsiIiKqOoYbKmfp/ku4nV+MJi7WeLG9p9TlEBERVQvDDelJzynEtwcSAQDv9vaHmYI/IkREVL/wnYv0LNgTjzvFGrT1skd4K1epyyEiIqo2hhvSuZqZj9VHrwIA3nvaHzKZTOKKiIiIqo/hhnTm7oxDsUbgyWbO6OTnJHU5REREj4ThhgAAfydn45dTyQCASeG8OCYREdVfDDcEAPh8+3kIATwb4I7WnnZSl0NERPTIGG4If1zKxN64dJjJZXi3N8/aEBFR/cZwY+KEEJi9vfTimAODveDjZCVxRURERI+H4cbE7T6XhuNXbkFtLsdbPZtKXQ4REdFjY7gxYRqtwOd3z9pEdvaFq61a4oqIiIgeH8ONCdt9LhVxqTmwVZvhjSf9pC6HiIioRjDcmLBvD5ZeZmHoE96wszSXuBoiIqKawXBjok5fz8LRxJswk8swItRH6nKIiIhqDMONiVp28BIAoF9bD7jZcawNEREZD4YbE5SSVYDf/roBABjVxVfiaoiIiGoWw40JWhVzGSVagRBfR65GTERERofhxsTkFZbgxyNXAPCsDRERGSeGGxOzMfY6sgtK4NPAEj1buEpdDhERUY1juDEhWq3A8rvTv1/t4guFXCZxRURERDWP4caE7D6fhsuZ+bBVm6F/+4ZSl0NERFQrGG5MyLcHSqd/DwnxhpXKTOJqiIiIagfDjYk4k5SFP8oW7evkLXU5REREtYbhxkQsuzvWpm+AO9ztLCSuhoiIqPYw3JiAlKwC/N+pZACc/k1ERMaP4cYEfHd30b6OPo4IaGgvdTlERES1iuHGyOUXleDHP64CAEZ15VkbIiIyfgw3Rm5jbBKy7hSjkaMlwrhoHxERmQCGGyOmt2hfZx8u2kdERCaB4caI7Y1LQ2JGHmzUZnipg5fU5RAREdUJhhsj9u2B0rM2Qzo24qJ9RERkMhhujNTZ5CzEXMqEQi7DiE4+UpdDRERUZxhujFTZon3PtHGHhz0X7SMiItPBcGOE0rK5aB8REZkuhhsj9F3MFRRrBIJ9HBDoZS91OURERHWK4cbI3CnS4Ic/rgDgWRsiIjJNDDdGZmPsddzOL4aXowV6tXSTuhwiIqI6x3BjRLRageWHyhbt8+WifUREZJIYboxI9IU0XErPg42Ki/YREZHpYrgxImXTvweHNII1F+0jIiITxXBjJP5OzsahBC7aR0REZBDhZuHChfDx8YFarUZISAiOHj1aadulS5eia9eucHBwgIODA8LCwh7Y3lSUnbXp09oNnly0j4iITJjk4WbdunWIiorC1KlTERsbi7Zt2yI8PBxpaWkVto+OjsbgwYOxd+9exMTEwMvLC71790ZSUlIdV2440rIL8Oup0v6P7tpY4mqIiIikJRNCCCkLCAkJQXBwMBYsWAAA0Gq18PLywvjx4/H+++8/dH+NRgMHBwcsWLAAw4cPf2j77Oxs2NnZISsrC7a2to9dvyH4Ykccvt6TgCBvB2wc00nqcoiIiGpcdd6/JT1zU1RUhOPHjyMsLEy3TS6XIywsDDExMVV6jPz8fBQXF8PR0bG2yjRoBcUa/HCkdNG+0Vy0j4iICJJOqcnIyIBGo4Grq6vedldXV5w/f75Kj/Hee+/Bw8NDLyDdq7CwEIWFhbrvs7OzH71gA7QpNgm38ovR0MECvVtx0T4iIiLJx9w8jpkzZ2Lt2rX4+eefoVarK2wzY8YM2NnZ6W5eXsaz/otWK7Ds4CUAQCQX7SMiIgIgcbhxcnKCQqFAamqq3vbU1FS4uT34LMScOXMwc+ZM7NixAwEBAZW2mzx5MrKysnS3a9eu1UjthmBffDou3l207+UODaUuh4iIyCBIGm6USiWCgoKwe/du3TatVovdu3cjNDS00v1mz56N6dOnY9u2bejQocMDn0OlUsHW1lbvZiyWHSid/j0w2As2anOJqyEiIjIMki9jGxUVhREjRqBDhw7o2LEj5s+fj7y8PERGRgIAhg8fDk9PT8yYMQMAMGvWLEyZMgWrV6+Gj48PUlJSAADW1tawtraWrB917XxKNg4mZEAuA0Z29pG6HCIiIoMhebgZOHAg0tPTMWXKFKSkpCAwMBDbtm3TDTK+evUq5PJ/TjB98803KCoqwoABA/QeZ+rUqfjkk0/qsnRJlZ216dPaHQ0dLCWuhoiIyHBIvs5NXTOGdW7ScgrQZeZeFGm02PRmJ7Rv5CB1SURERLWq3qxzQ4/mhyNXUaTRon0jewYbIiKi+zDc1DP3Lto3qgsvtUBERHQ/hpt6ZvOJJNzMK4KnvQXCW7k+fAciIiITw3BTjwgh8O3dq39HdvaBmYKHj4iI6H58d6xH9l1IR0JaLqxVZng52HhWWiYiIqpJDDf1yLKD/yzaZ8tF+4iIiCrEcFNPxKXk4ED83UX7OvlIXQ4REZHBYripJ5bfPWvzdGs3eDly0T4iIqLKMNzUA+k5hfj5ZBIATv8mIiJ6GIabeuCHI1dQVKJFoJc9gry5aB8REdGDMNwYuHsX7Rvd1VfiaoiIiAwfw42B++VkEjLvLtr3dCs3qcshIiIyeAw3BkwIoZv+PbITF+0jIiKqCr5bGrAD8Rm4kJoLK6UCAzty0T4iIqKqYLgxYGWXWniZi/YRERFVGcONgbqQmoP9F9IhlwGRnTiQmIiIqKoYbgxU2aJ9vVu6oVEDLtpHRERUVQw3BigztxCbTpQu2sfp30RERNXDcGOAfjhyFUUlWrTlon1ERETVxnBjYAqKNfj+yGUAwKguvpDJZNIWREREVM8w3BiYX08lIyO3CB52avRpzUX7iIiIqovhxoAIIXQDiUd08oE5F+0jIiKqNr57GpBDCZk4n5IDS6UCgzo2krocIiKieonhxoB8e/ASAODlDl6ws+CifURERI+C4cZAJKTlIDouHTIZENnZR+pyiIiI6i2GGwOx7OBlAEDvlq7wbmAlbTFERET1GMONAcjMLcSm2OsAgFFdGktcDRERUf3GcGMAfvzjKgpLtAhoaIdgHy7aR0RE9DgYbiRWWKLBdzFXAHDRPiIioprAcCOxX08mIyO3EO52ajzTxl3qcoiIiOo9hhsJCSGwjIv2ERER1Si+m0ro8MV/Fu0bHMxF+4iIiGoCw42Evj1QumjfS0ENYWfJRfuIiIhqAsONRBLScrFXt2ifr9TlEBERGQ2GG4ksP1Q61iashSt8nLhoHxERUU1huJHAzbwi3aJ9o7vwrA0REVFNYriRwOo/rqCgWIs2nnbo6OsodTlERERGheGmjhWWaLCKi/YRERHVGoabOvbbqRtIzymEmy0X7SMiIqoNDDd1SAiBb+8u2je8kzeUZnz5iYiIahrfXetQzKVMnLuRDQtzBYZ05KJ9REREtYHhpg4tO1B61ualDg1hb6mUuBoiIiLjxHBTRy6m52L3+TQu2kdERFTLGG7qyIq7i/b1bO4KXy7aR0REVGsYburArbwibDheumjfKC7aR0REVKsYburA6qNXUVCsRSsPWzzRmIv2ERER1SaGm1pWVKLFqsOXAQCju3LRPiIiotrGcFPLfvsrGWk5hXCxUaFvGw+pyyEiIjJ6DDe1SAiBZXcX7RvRyYeL9hEREdUBvtvWoiOXbuJscjbU5nIMDeGifURERHWB4aYWlZ21GRDERfuIiIjqCsNNLbmUnovd51MBAK9y0T4iIqI6w3BTS1YcugwhgJ7NXdDY2VrqcoiIiEwGw00tuJ1/z6J9XXnWhoiIqC4x3NSC1Uev4k6xBi3dbRHauIHU5RAREZkUhpsadu+ifaO6cNE+IiKiusZwU8O2nr6B1OzSRfv6teWifURERHXNIMLNwoUL4ePjA7VajZCQEBw9evSB7devX4/mzZtDrVajTZs22Lp1ax1V+mBCCHx78BIAYHioNxftIyIikoDk777r1q1DVFQUpk6ditjYWLRt2xbh4eFIS0ursP3hw4cxePBgjBo1CidOnEBERAQiIiJw5syZOq68vKOJN3EmqXTRviEh3lKXQ0REZJJkQgghZQEhISEIDg7GggULAABarRZeXl4YP3483n///XLtBw4ciLy8PPz222+6bU888QQCAwOxaNGihz5fdnY27OzskJWVBVtb25rrCIDXvvsTO/9OxdCQRvjvC21q9LGJiIhMWXXevyU9c1NUVITjx48jLCxMt00ulyMsLAwxMTEV7hMTE6PXHgDCw8MrbV9YWIjs7Gy9W224nJGHXefuLtrXhdO/iYiIpCJpuMnIyIBGo4Grq6vedldXV6SkpFS4T0pKSrXaz5gxA3Z2drqbl5dXzRR/n6s38+FsrcJTzV3gx0X7iIiIJCP5mJvaNnnyZGRlZelu165dq5XnebKZMw6+9xRmvsiPo4iIiKRkJuWTOzk5QaFQIDU1VW97amoq3NzcKtzHzc2tWu1VKhVUKlXNFPwQSjM5XGzVdfJcREREVDFJz9wolUoEBQVh9+7dum1arRa7d+9GaGhohfuEhobqtQeAnTt3VtqeiIiITIukZ24AICoqCiNGjECHDh3QsWNHzJ8/H3l5eYiMjAQADB8+HJ6enpgxYwYA4O2330a3bt3wxRdfoG/fvli7di3+/PNPLFmyRMpuEBERkYGQPNwMHDgQ6enpmDJlClJSUhAYGIht27bpBg1fvXoVcvk/J5g6deqE1atX46OPPsIHH3yApk2bYvPmzWjdurVUXSAiIiIDIvk6N3WtNte5ISIiotpRb9a5ISIiIqppDDdERERkVBhuiIiIyKgw3BAREZFRYbghIiIio8JwQ0REREaF4YaIiIiMCsMNERERGRWGGyIiIjIqkl9+oa6VLcicnZ0tcSVERERUVWXv21W5sILJhZucnBwAgJeXl8SVEBERUXXl5OTAzs7ugW1M7tpSWq0WycnJsLGxgUwmq9HHzs7OhpeXF65du2aU160y9v4Bxt9H9q/+M/Y+sn/1X231UQiBnJwceHh46F1QuyImd+ZGLpejYcOGtfoctra2RvtDCxh//wDj7yP7V/8Zex/Zv/qvNvr4sDM2ZTigmIiIiIwKww0REREZFYabGqRSqTB16lSoVCqpS6kVxt4/wPj7yP7Vf8beR/av/jOEPprcgGIiIiIybjxzQ0REREaF4YaIiIiMCsMNERERGRWGGyIiIjIqDDcPsHDhQvj4+ECtViMkJARHjx59YPv169ejefPmUKvVaNOmDbZu3ap3vxACU6ZMgbu7OywsLBAWFob4+Pja7MJDVaePS5cuRdeuXeHg4AAHBweEhYWVaz9y5EjIZDK929NPP13b3ahUdfq3cuXKcrWr1Wq9NoZ2DKvTv+7du5frn0wmQ9++fXVtDOn47d+/H/369YOHhwdkMhk2b9780H2io6PRvn17qFQqNGnSBCtXrizXprq/17Wpun3ctGkTevXqBWdnZ9ja2iI0NBTbt2/Xa/PJJ5+UO4bNmzevxV5Urrr9i46OrvBnNCUlRa9dfT6GFf2OyWQytGrVStfGUI7hjBkzEBwcDBsbG7i4uCAiIgJxcXEP3c8Q3gsZbiqxbt06REVFYerUqYiNjUXbtm0RHh6OtLS0CtsfPnwYgwcPxqhRo3DixAlEREQgIiICZ86c0bWZPXs2vvrqKyxatAh//PEHrKysEB4ejoKCgrrqlp7q9jE6OhqDBw/G3r17ERMTAy8vL/Tu3RtJSUl67Z5++mncuHFDd1uzZk1ddKec6vYPKF1R897ar1y5one/IR3D6vZv06ZNen07c+YMFAoFXnrpJb12hnL88vLy0LZtWyxcuLBK7RMTE9G3b1/06NEDJ0+exIQJEzB69Gi9N/9H+ZmoTdXt4/79+9GrVy9s3boVx48fR48ePdCvXz+cOHFCr12rVq30juHBgwdro/yHqm7/ysTFxenV7+Lioruvvh/DL7/8Uq9v165dg6OjY7nfQ0M4hvv27cPYsWNx5MgR7Ny5E8XFxejduzfy8vIq3cdg3gsFVahjx45i7Nixuu81Go3w8PAQM2bMqLD9yy+/LPr27au3LSQkRLz++utCCCG0Wq1wc3MTn3/+ue7+27dvC5VKJdasWVMLPXi46vbxfiUlJcLGxkasWrVKt23EiBHi+eefr+lSH0l1+7dixQphZ2dX6eMZ2jF83OM3b948YWNjI3Jzc3XbDOn43QuA+Pnnnx/YZtKkSaJVq1Z62wYOHCjCw8N13z/ua1abqtLHirRs2VJMmzZN9/3UqVNF27Zta66wGlKV/u3du1cAELdu3aq0jbEdw59//lnIZDJx+fJl3TZDPYZpaWkCgNi3b1+lbQzlvZBnbipQVFSE48ePIywsTLdNLpcjLCwMMTExFe4TExOj1x4AwsPDde0TExORkpKi18bOzg4hISGVPmZtepQ+3i8/Px/FxcVwdHTU2x4dHQ0XFxf4+/tjzJgxyMzMrNHaq+JR+5ebmwtvb294eXnh+eefx9mzZ3X3GdIxrInjt2zZMgwaNAhWVlZ62w3h+D2Kh/0O1sRrZmi0Wi1ycnLK/Q7Gx8fDw8MDjRs3xtChQ3H16lWJKnw0gYGBcHd3R69evXDo0CHddmM8hsuWLUNYWBi8vb31thviMczKygKAcj9v9zKU90KGmwpkZGRAo9HA1dVVb7urq2u5z37LpKSkPLB92dfqPGZtepQ+3u+9996Dh4eH3g/p008/je+++w67d+/GrFmzsG/fPvTp0wcajaZG63+YR+mfv78/li9fjl9++QU//PADtFotOnXqhOvXrwMwrGP4uMfv6NGjOHPmDEaPHq233VCO36Oo7HcwOzsbd+7cqZGfeUMzZ84c5Obm4uWXX9ZtCwkJwcqVK7Ft2zZ88803SExMRNeuXZGTkyNhpVXj7u6ORYsWYePGjdi4cSO8vLzQvXt3xMbGAqiZ/7cMSXJyMn7//fdyv4eGeAy1Wi0mTJiAzp07o3Xr1pW2M5T3QpO7KjjVjJkzZ2Lt2rWIjo7WG3Q7aNAg3b/btGmDgIAA+Pn5ITo6Gj179pSi1CoLDQ1FaGio7vtOnTqhRYsWWLx4MaZPny5hZTVv2bJlaNOmDTp27Ki3vT4fP1OzevVqTJs2Db/88ovemJQ+ffro/h0QEICQkBB4e3vjp59+wqhRo6Qotcr8/f3h7++v+75Tp064ePEi5s2bh++//17CymrHqlWrYG9vj4iICL3thngMx44dizNnzkg2fqu6eOamAk5OTlAoFEhNTdXbnpqaCjc3twr3cXNze2D7sq/Vecza9Ch9LDNnzhzMnDkTO3bsQEBAwAPbNm7cGE5OTkhISHjsmqvjcfpXxtzcHO3atdPVbkjH8HH6l5eXh7Vr11bpP0mpjt+jqOx30NbWFhYWFjXyM2Eo1q5di9GjR+Onn34q9xHA/ezt7dGsWbN6cQwr0rFjR13txnQMhRBYvnw5hg0bBqVS+cC2Uh/DcePG4bfffsPevXvRsGHDB7Y1lPdChpsKKJVKBAUFYffu3bptWq0Wu3fv1vvL/l6hoaF67QFg586duva+vr5wc3PTa5OdnY0//vij0sesTY/SR6B0lPv06dOxbds2dOjQ4aHPc/36dWRmZsLd3b1G6q6qR+3fvTQaDU6fPq2r3ZCO4eP0b/369SgsLMQrr7zy0OeR6vg9iof9DtbEz4QhWLNmDSIjI7FmzRq9afyVyc3NxcWLF+vFMazIyZMndbUbyzEESmciJSQkVOmPDKmOoRAC48aNw88//4w9e/bA19f3ofsYzHthjQ1NNjJr164VKpVKrFy5Uvz999/iX//6l7C3txcpKSlCCCGGDRsm3n//fV37Q4cOCTMzMzFnzhxx7tw5MXXqVGFubi5Onz6tazNz5kxhb28vfvnlF/HXX3+J559/Xvj6+oo7d+7Uef+EqH4fZ86cKZRKpdiwYYO4ceOG7paTkyOEECInJ0e8++67IiYmRiQmJopdu3aJ9u3bi6ZNm4qCggKD79+0adPE9u3bxcWLF8Xx48fFoEGDhFqtFmfPntW1MaRjWN3+lenSpYsYOHBgue2GdvxycnLEiRMnxIkTJwQAMXfuXHHixAlx5coVIYQQ77//vhg2bJiu/aVLl4SlpaX497//Lc6dOycWLlwoFAqF2LZtm67Nw16zulbdPv7444/CzMxMLFy4UO938Pbt27o277zzjoiOjhaJiYni0KFDIiwsTDg5OYm0tDSD79+8efPE5s2bRXx8vDh9+rR4++23hVwuF7t27dK1qe/HsMwrr7wiQkJCKnxMQzmGY8aMEXZ2diI6Olrv5y0/P1/XxlDfCxluHuDrr78WjRo1EkqlUnTs2FEcOXJEd1+3bt3EiBEj9Nr/9NNPolmzZkKpVIpWrVqJLVu26N2v1WrFxx9/LFxdXYVKpRI9e/YUcXFxddGVSlWnj97e3gJAudvUqVOFEELk5+eL3r17C2dnZ2Fubi68vb3Fa6+9Jtl/OkJUr38TJkzQtXV1dRXPPPOMiI2N1Xs8QzuG1f0ZPX/+vAAgduzYUe6xDO34lU0Lvv9W1qcRI0aIbt26ldsnMDBQKJVK0bhxY7FixYpyj/ug16yuVbeP3bp1e2B7IUqnv7u7uwulUik8PT3FwIEDRUJCQt127K7q9m/WrFnCz89PqNVq4ejoKLp37y727NlT7nHr8zEUonTqs4WFhViyZEmFj2kox7CifgHQ+70y1PdC2d0OEBERERkFjrkhIiIio8JwQ0REREaF4YaIiIiMCsMNERERGRWGGyIiIjIqDDdERERkVBhuiIiIyKgw3BAREZFRYbghIiIio8JwQ0REREaF4YaI6r309HS4ubnhs88+0207fPgwlEpluSsUE5Hx47WliMgobN26FRERETh8+DD8/f0RGBiI559/HnPnzpW6NCKqYww3RGQ0xo4di127dqFDhw44ffo0jh07BpVKJXVZRFTHGG6IyGjcuXMHrVu3xrVr13D8+HG0adNG6pKISAIcc0NERuPixYtITk6GVqvF5cuXpS6HiCTCMzdEZBSKiorQsWNHBAYGwt/fH/Pnz8fp06fh4uIidWlEVMcYbojIKPz73//Ghg0bcOrUKVhbW6Nbt26ws7PDb7/9JnVpRFTH+LEUEdV70dHRmD9/Pr7//nvY2tpCLpfj+++/x4EDB/DNN99IXR4R1TGeuSEiIiKjwjM3REREZFQYboiIiMioMNwQERGRUWG4ISIiIqPCcENERERGheGGiIiIjArDDRERERkVhhsiIiIyKgw3REREZFQYboiIiMioMNwQERGRUWG4ISIiIqPy/5QXhVI7r1ITAAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"## Example 4: Multidimensional"
],
"metadata": {
"id": "UZUFw8AgQZuV"
}
},
{
"cell_type": "markdown",
"source": [
"Solve the discrete Poisson equation on the unit square,\n",
"\n",
"$-\\Delta u = 1$ on $\\Omega=[0,1]^2$\n",
"\n",
"with\n",
"\n",
"$u=0$ on $\\partial \\Omega$\n",
"\n",
"The interior points are given by\n",
"$-\\Delta u = 1$ on $\\Omega=[0,1]^2$"
],
"metadata": {
"id": "qkToMFY8Qawl"
}
},
{
"cell_type": "markdown",
"source": [
"For central difference on a 2D grid with spacing h in both x and y directions, the discrete Laplacian at a point (i,j) is:\n",
"\n",
"$$(u(i+1,j) + u(i-1,j) + u(i,j+1) + u(i,j-1) - 4u(i,j)) / h^2=1$$\n"
],
"metadata": {
"id": "zrtxkvXyQ9qK"
}
},
{
"cell_type": "code",
"source": [
"# prompt: write a code to generate hte matrix u from the equation above with the boundary\n",
"\n",
"import numpy as np\n",
"import scipy as sp\n",
"import matplotlib.pyplot as plt\n",
"from scipy.optimize import root\n",
"\n",
"def get_A_and_b_for_poisson(n):\n",
" h = 1. / (n + 1)\n",
" A = np.zeros(((n + 1)**2, (n + 1)**2))\n",
" b = np.zeros((n + 1)**2)\n",
"\n",
" for i in range(n + 1):\n",
" for j in range(n + 1):\n",
" if i == 0 or i == n or j == 0 or j == n: # Boundary condition\n",
" row_index = i * (n + 1) + j\n",
" A[row_index, row_index] = 1\n",
" else: # Interior point\n",
" row_index = i * (n + 1) + j\n",
" A[row_index, row_index] = -4\n",
" A[row_index, (i - 1) * (n + 1) + j] = 1\n",
" A[row_index, (i + 1) * (n + 1) + j] = 1\n",
" A[row_index, i * (n + 1) + (j - 1)] = 1\n",
" A[row_index, i * (n + 1) + (j + 1)] = 1\n",
" b[row_index] = -h**2\n",
"\n",
" return A, b\n",
"\n",
"\n",
"n = 10 # Number of grid points in each direction\n",
"A, b = get_A_and_b_for_poisson(n)\n",
"\n",
"\n",
"u = np.linalg.solve(A, b)\n",
"\n",
"# Reshape the solution into a 2D array\n",
"u_matrix = u.reshape((n + 1, n + 1))\n",
"\n",
"# Plot the solution\n",
"plt.imshow(u_matrix, cmap='viridis')\n",
"plt.colorbar()\n",
"plt.title('Solution of the Poisson Equation')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 452
},
"id": "18nAjqU4RsTg",
"outputId": "3c959af1-135d-4c5a-80b5-500300b41391"
},
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "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v+b0hlzLzc1N+v+VlZWoqKhATEwMTp48aTZE0VjN+dxa+v1o7HUjuhkm9FYSGRmJDz74AL/++iv279+PuXPn4vz583jooYfwv//9DwBw+vRpODk54bbbbjPbV6fToWPHjjh9+nSrxlx3vl69etV7rXfv3qioqEB1dbXZ9u7du5v9XPeH/9dff23WeYKDg1vsfV8fK3A13rpYy8vLce7cOWRlZUkJua4kJSUBaNykxqioKOTm5mLHjh0oKChARUUF/vGPf8DNzQ3l5eW4ePFig9fYaDSipKTE4nGDgoKQmpqKv/3tb/D29kZcXBxWrVpllpzGjx+PwYMH47HHHoOvry8mTJiAf//732bJ/fTp0+jZs2e9mdu9e/eWXr/RdWvMv/G1QkNDERsbW6+4urpK53Nycqo3nGLpGjXF559/jtjYWGkuSJcuXaS5BM1J6E393Go0GrMhH8D880ZkLY6htzJXV1dERkYiMjISt99+O5KSkrBx40akpaVJda6fzNMYDe3T2hNuGrrdTTjg3ZE3i7Uu6T3yyCPSZLzr9evX76bn8fb2vuktds21dOlSTJkyBZs3b8b27dsxc+ZMpKenY+/evbjlllvg5uaG3bt3Y+fOnfj444+Rk5ODDRs24K677sL27dubdXuiI/0bN/Zzf+LECYwYMQLBwcFYtmwZ/P394erqim3btuHNN99ssPfClhz1VlBSDiZ0O4qIiABwtWsbuDp5zmg04rvvvpNaR8DViVnnzp274T26da2k6x+iYql129gvDHXnO3r0aL3Xvv32W3h7ezf4UJemuPY8d911l9lrR48ebfa9yc35YnStuhnWBoOhxRJyly5d0L59+wavsZOTE/z9/W94jNDQUISGhmL+/PkoKCjA4MGDkZmZiZdeegnA1dutRowYgREjRmDZsmV45ZVX8Pzzz2Pnzp2IjY1FQEAAvvzySxiNRrNW+rfffgsArX5veN3vwYkTJ8xav5auUadOnSw+OOj6z/1HH32EmpoabNmyxayHYefOnfX2bc7vhy0/t0TNxS73VrBz506LrZe6scK6P1p//OMfAaDeU9yWLVsGADec5VvXPbl7925pm8FgQFZWVr267u7ujepi7Nq1K8LDw7Fu3TqzP5pHjhzB9u3bpXitFRERAR8fH2RmZprdnvfJJ5/gm2++afbs5rovG819UpyzszMefPBB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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"# prompt: Plot the sparsity pattern of A\n",
"\n",
"plt.spy(A)\n",
"plt.title('Sparsity Pattern of A')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 459
},
"id": "yKEwgWQwSDqR",
"outputId": "5b04086a-a2bd-4f1d-f837-dda0358b9965"
},
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAbUAAAG6CAYAAACP/NgIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyGUlEQVR4nO3de1xU9b7/8feIMhAIBCqIgrJNU9PK8BJ2PUVpN7M0N24qstJdYmV2tR6aVkbZZZduL0dPRz3lpV1qF0/lNjWtJLx309QSlTLANAbFRILv749+znEEBHSGgS+v5+OxHo9Ya81an+9I8+HzWd9Zy2GMMQIAwAKN/B0AAADeQlIDAFiDpAYAsAZJDQBgDZIaAMAaJDUAgDVIagAAa5DUAADWIKkBAKxBUgMk3XHHHWrbtq2/w8AJ8vLyNHDgQEVFRcnhcOjVV1/1d0io40hq8KpvvvlGAwcOVJs2bRQUFKRWrVrpqquu0uTJk/0dWo0cPnxY48aN06effurV486ePVsOh8O9BAUFqUOHDhoxYoTy8vJqfLznnntO7777brn1a9as0bhx41RQUHD6QfvRgw8+qKVLl2r06NF644031Ldv3ypfU1BQoKCgIDkcDm3durUWokSdYgAv+eKLL0xgYKA566yzzDPPPGNmzpxpxo4da66++mrTrl07f4d3UkePHjVHjhxx/7xv3z4jyTz11FNePc+sWbOMJPP000+bN954w8ycOdOkpaWZRo0amYSEBFNUVFSj44WEhJi0tLRy61988UUjyWRnZ3sncD+Jjo42qampNXrNjBkzTFBQkImJiTFPPvmkjyJDXdXYzzkVFpkwYYLCw8O1bt06RUREeGzLz8+v9XiKiooUEhJSrX2bNGni42g8XXPNNerevbsk6e6771ZUVJReeeUVvffeexo8eHCtxlIThw8f1hlnnFFr58vPzy/3u1SVN998U9dee63atGmjefPm6dlnn/VNcKiTaD/Ca3788Uedc845FX4ItWjRwuNnh8OhESNGaO7cuTr77LMVFBSkxMRErV692mO/3bt3a/jw4Tr77LMVHBysqKgo3XLLLdq1a5fHfsfaeqtWrdLw4cPVokULtW7dWpJ08OBBjRw5Um3btpXT6VSLFi101VVXaePGje7XH39NbdeuXWrevLkkafz48e5W4bhx4zRr1iw5HA5t2rSp3Bife+45BQQE6Oeff67pW6crrrhCkpSdnS1Jeumll9S7d29FRUUpODhYiYmJeuedd8q9h0VFRZozZ447xjvuuEPjxo3TI488IklKSEhwbzv+PXvzzTeVmJio4OBgRUZGKiUlRTk5OR7Hv/zyy9WlSxdt2LBBl156qc444ww98cQT2rVrlxwOh1566SXNmDFD7dq1k9PpVI8ePbRu3bpqjXfnzp265ZZbFBkZqTPOOEMXXnih/vd//9e9/di/pzFGU6ZMcY+hKnv27NFnn32mlJQUpaSkKDs7W2vWrKlWTLADlRq8pk2bNsrMzNS3336rLl26VLn/qlWr9NZbb+n++++X0+nU1KlT1bdvX61du9b9+nXr1mnNmjVKSUlR69attWvXLk2bNk2XX365tmzZUq5qGD58uJo3b66xY8eqqKhIknTPPffonXfe0YgRI9S5c2ft379fn3/+ubZu3aoLLrigXFzNmzfXtGnTdO+99+qmm27SzTffLEk699xzlZCQoPT0dM2dO1fdunXzeN3cuXN1+eWXq1WrVjV+73788UdJUlRUlCTptddeU79+/ZSamqqjR49qwYIFuuWWW7RkyRJdd911kqQ33nhDd999t3r27Klhw4ZJktq1a6eQkBBt375d8+fP1z/+8Q81a9bMPS7pz4p6zJgxGjRokO6++27t27dPkydP1qWXXqpNmzZ5/FGyf/9+XXPNNUpJSdGtt96q6Oho97Z58+bp4MGD+vvf/y6Hw6GJEyfq5ptv1s6dO09a+ebl5al37946fPiw7r//fkVFRWnOnDnq16+f3nnnHd1000269NJL9cYbb+i2227TVVddpdtvv71a7+P8+fMVEhKi66+/XsHBwWrXrp3mzp2r3r17V/NfAvWev/ufsMe///1vExAQYAICAkxSUpJ59NFHzdKlS83Ro0fL7SvJSDLr1693r9u9e7cJCgoyN910k3vd4cOHy702MzPTSDL/8z//41537FrVxRdfbP744w+P/cPDw016evpJY09LSzNt2rRx/3yya2qDBw82sbGxprS01L1u48aNRpKZNWvWSc9zLM5PPvnE7Nu3z+Tk5JgFCxaYqKgoExwcbH766acKx3306FHTpUsXc8UVV3isr+k1tV27dpmAgAAzYcIEj/XffPONady4scf6yy67zEgy06dP99g3OzvbSDJRUVHmwIED7vXvvfeekWQ++OCDk74HI0eONJLMZ5995l538OBBk5CQYNq2bevxvkqq8t/ueF27dvW4BvfEE0+YZs2amZKSkmofA/Ub7Ud4zVVXXaXMzEz169dPX331lSZOnKg+ffqoVatWev/998vtn5SUpMTERPfP8fHxuvHGG7V06VKVlpZKkoKDg93bS0pKtH//fp111lmKiIjwaB8eM3ToUAUEBHisi4iIUFZWlvbu3euVcd5+++3au3evVq5c6V43d+5cBQcHa8CAAdU6RnJyspo3b664uDilpKQoNDRUixcvdld5x4/7t99+k8vl0iWXXFLhmGti0aJFKisr06BBg/Trr7+6l5iYGLVv395jTJLkdDo1ZMiQCo/117/+VWeeeab750suuUTSn63Fk/nwww/Vs2dPXXzxxe51oaGhGjZsmHbt2qUtW7ac0ti+/vprffPNNx7XJAcPHqxff/1VS5cuPaVjov4hqcGrevTooUWLFum3337T2rVrNXr0aB08eFADBw4s92HVvn37cq/v0KGDDh8+rH379kmSfv/9d40dO1ZxcXFyOp1q1qyZmjdvroKCArlcrnKvT0hIKLdu4sSJ+vbbbxUXF6eePXtq3LhxVX7wnsxVV12lli1bau7cuZKksrIyzZ8/XzfeeKOaNm1arWNMmTJFy5Yt08qVK7Vlyxbt3LlTffr0cW9fsmSJLrzwQgUFBSkyMtLdEq1ozDWxY8cOGWPUvn17NW/e3GPZunVruQk9rVq1UmBgYIXHio+P9/j5WIL77bffThrD7t27dfbZZ5db36lTJ/f2U/Hmm28qJCREf/nLX/TDDz/ohx9+UFBQkNq2bev+t4L9uKYGnwgMDFSPHj3Uo0cPdejQQUOGDNHbb7+tp556qkbHue+++zRr1iyNHDlSSUlJCg8Pl8PhUEpKisrKysrtf3yFc8ygQYN0ySWXaPHixfr3v/+tF198US+88IIWLVqka665psZjCwgI0N/+9jfNnDlTU6dO1RdffKG9e/fq1ltvrfYxevbs6Z79eKLPPvtM/fr106WXXqqpU6eqZcuWatKkiWbNmqV58+bVON7jlZWVyeFw6KOPPipX0Up/VkzHq+j9PKai10uSMea0YjwVxhjNnz9fRUVF6ty5c7nt+fn5OnToULnxwT4kNfjcsQ/vX375xWP9jh07yu27fft2nXHGGe5JDe+8847S0tL08ssvu/c5cuRIjb9U3LJlSw0fPlzDhw9Xfn6+LrjgAk2YMKHSpFbVTLvbb79dL7/8sj744AN99NFHat68uUeldToWLlyooKAgLV26VE6n071+1qxZ1Y6zsvXt2rWTMUYJCQnq0KGDV+KtqTZt2mjbtm3l1n///ffu7TW1atUq/fTTT3r66afdFd8xv/32m4YNG6Z33323Rn94oH6i/QivWblyZYV/pX/44YeSVK7llJmZ6XGNKCcnR++9956uvvpqdxUQEBBQ7piTJ092X3OrSmlpabmWXYsWLRQbG6vi4uJKX3dsVmVlyfPcc8/Vueeeq//6r//SwoULlZKSosaNvfM3YkBAgBwOh8cYd+3aVeGdQ0JCQiqM8dj3807cdvPNNysgIEDjx48v974aY7R///7Tjr8q1157rdauXavMzEz3uqKiIs2YMUNt27atsNKqyrHW4yOPPKKBAwd6LEOHDlX79u1pQTYQVGrwmvvuu0+HDx/WTTfdpI4dO+ro0aNas2aN3nrrLbVt27bchIMuXbqoT58+HlP6pT+/G3bM9ddfrzfeeEPh4eHq3LmzMjMz9cknn7invlfl4MGDat26tQYOHKjzzjtPoaGh+uSTT7Ru3TqP6u9EwcHB6ty5s9566y116NBBkZGR6tKli8dXFW6//XY9/PDDkuTVCuC6667TK6+8or59++pvf/ub8vPzNWXKFJ111ln6+uuvPfZNTEzUJ598oldeeUWxsbFKSEhQr1693BNwnnzySaWkpKhJkya64YYb1K5dOz377LMaPXq0du3apf79+6tp06bKzs7W4sWLNWzYMPeYfOXxxx/X/Pnzdc011+j+++9XZGSk5syZo+zsbC1cuFCNGtXsb+3i4mItXLhQV111lYKCgircp1+/fnrttdeUn59f7juTsIz/Jl7CNh999JG58847TceOHU1oaKj7lln33XefycvL89hX/3+q9ptvvmnat29vnE6n6datm1m5cqXHfr/99psZMmSIadasmQkNDTV9+vQx33//vWnTpo3HVPZjU+XXrVvn8fri4mLzyCOPmPPOO880bdrUhISEmPPOO89MnTrVY78Tp/QbY8yaNWtMYmKiCQwMrHB6/y+//GICAgJMhw4dqv0eVRbniV5//XX3+9KxY0cza9Ys89RTT5kT/5f9/vvvzaWXXmqCg4ONJI/35JlnnjGtWrUyjRo1Kje9f+HChebiiy82ISEhJiQkxHTs2NGkp6ebbdu2ufe57LLLzDnnnFMutmNT+l988cVy2yp6nyry448/moEDB5qIiAgTFBRkevbsaZYsWVLh8aqa0r9w4UIjybz++uuV7vPpp58aSea1116rMjbUbw5j/HBVFw2ew+FQenq6/vnPf/o7lFP266+/qmXLlho7dqzGjBnj73AAiGtqwCmbPXu2SktLddttt/k7FAD/H9fUgBpasWKFtmzZogkTJqh///48hw2oQ0hqQA09/fTTWrNmjS666KJ695w4wHZcUwMAWINragAAa5DUAADWIKkBAKxBUgMAWKPeJrUpU6aobdu2CgoKUq9evbR27Vp/h+Q1GRkZ6tGjh5o2baoWLVqof//+5W4Ae+TIEaWnpysqKkqhoaEaMGCA8vLy/BSx9z3//PNyOBwaOXKke52NY/7555916623KioqSsHBweratavWr1/v3m6M0dixY9WyZUsFBwcrOTm5whtB1xelpaUaM2aMEhIS3E+mfuaZZzzuQ1nfx7x69WrdcMMNio2NlcPhKHfPzuqM78CBA0pNTVVYWJgiIiJ011136dChQ7U4ipo72bhLSkr02GOPqWvXrgoJCVFsbKz7uYTH88q4/Xczk1O3YMECExgYaP77v//bfPfdd2bo0KEmIiKi3K2Y6qs+ffqYWbNmmW+//dZs3rzZXHvttSY+Pt4cOnTIvc8999xj4uLizPLly8369evNhRdeaHr37u3HqL1n7dq1pm3btubcc881DzzwgHu9bWM+cOCAadOmjbnjjjtMVlaW2blzp1m6dKn54Ycf3Ps8//zzJjw83Lz77rvmq6++Mv369TMJCQnm999/92Pkp27ChAkmKirKLFmyxGRnZ5u3337bhIaGety+qr6P+cMPPzRPPvmkWbRokZFkFi9e7LG9OuPr27evOe+888yXX35pPvvsM3PWWWeZwYMH1/JIauZk4y4oKDDJycnmrbfeMt9//73JzMw0PXv2NImJiR7H8Ma462VS69mzp8f94EpLS01sbKzJyMjwY1S+k5+fbySZVatWGWP+/AVp0qSJefvtt937bN261UgymZmZ/grTKw4ePGjat29vli1bZi677DJ3UrNxzI899pi5+OKLK91eVlZmYmJiPO6xWFBQYJxOp5k/f35thOh11113nbnzzjs91t18880mNTXVGGPfmE/8cK/O+LZs2VLu/qAfffSRcTgc5ueff6612E9HRcn8RGvXrjWSzO7du40x3ht3vWs/Hj16VBs2bFBycrJ7XaNGjZScnOzxKAubHHt0SmRkpCRpw4YNKikp8XgPOnbsqPj4+Hr/HqSnp+u6667zGJtk55jff/99de/eXbfccotatGihbt26aebMme7t2dnZys3N9RhzeHi4evXqVW/H3Lt3by1fvlzbt2+XJH311Vf6/PPP3c+1s3HMx6vO+DIzMxUREeHxENnk5GQ1atRIWVlZtR6zr7hcLjkcDkVEREjy3rjr3R1Ffv31V5WWlio6OtpjfXR0tPshgzYpKyvTyJEjddFFF7kfe5Kbm6vAwED3L8Mx0dHRys3N9UOU3rFgwQJt3LhR69atK7fNxjHv3LlT06ZN06hRo/TEE09o3bp1uv/++xUYGKi0tDT3uCr6Xa+vY3788cdVWFiojh07KiAgQKWlpZowYYJSU1MlycoxH68648vNzS33eJzGjRsrMjLSivdA+vP6+GOPPabBgwcrLCxMkvfGXe+SWkOTnp6ub7/9Vp9//rm/Q/GpnJwcPfDAA1q2bFmlz8SyTVlZmbp3767nnntOktStWzd9++23mj59utLS0vwcnW/861//0ty5czVv3jydc8452rx5s0aOHKnY2FhrxwxPJSUlGjRokIwxmjZtmtePX+/aj82aNVNAQEC5WW95eXmKiYnxU1S+MWLECC1ZskQrV65U69at3etjYmJ09OjRck81rs/vwYYNG5Sfn68LLrhAjRs3VuPGjbVq1SpNmjRJjRs3VnR0tHVjbtmyZbmnPHfq1El79uyRJPe4bPpdf+SRR/T4448rJSVFXbt21W233aYHH3xQGRkZkuwc8/GqM76YmBjl5+d7bP/jjz904MCBev8eHEtou3fv1rJly9xVmuS9cde7pBYYGKjExEQtX77cva6srEzLly9XUlKSHyPzHmOMRowYocWLF2vFihVKSEjw2J6YmKgmTZp4vAfbtm3Tnj176u17cOWVV+qbb77R5s2b3Uv37t2Vmprq/m/bxnzRRReV+6rG9u3b1aZNG0lSQkKCYmJiPMZcWFiorKysejvmw4cPl3uydUBAgMrKyiTZOebjVWd8SUlJKigo0IYNG9z7rFixQmVlZerVq1etx+wtxxLajh07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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"#Summary"
],
"metadata": {
"id": "7jbPEmH0KkEH"
}
},
{
"cell_type": "markdown",
"source": [
"### Benefits\n",
"1. **Simplicity**: The finite difference method is relatively easy to understand and implement, making it accessible for many users.\n",
"2. **Efficiency**: It can be computationally efficient, especially for problems with simple geometries and boundary conditions.\n",
"3. **Structured Grids**: Works well with structured grids, which can simplify the discretization process.\n",
"4. **High-Order Approximations**: It is possible to obtain high-order approximations, which can improve the accuracy of the solution.\n",
"\n",
"### Drawbacks\n",
"1. **Limited Flexibility**: The method is less flexible compared to other methods like finite element or finite volume methods, particularly for complex geometries.\n",
"2. **Stability Issues**: Finite difference methods can suffer from stability issues, especially for certain types of partial differential equations.\n",
"3. **Boundary Conditions**: Handling complex boundary conditions can be challenging.\n",
"4. **Accuracy**: The accuracy of the method can be limited by the discretization error and round-off error.\n"
],
"metadata": {
"id": "7Bs7vMFFKiLz"
}
}
]
}